如何解决For循环不在c语言cs50 ide中运行 循环不会运行
#include <cs50.h>
#include <stdio.h>
#include <ctype.h>
#include <math.h>
#include <string.h>
#include <strings.h>
#include <stdlib.h>
string crypt(string msg,int key);
int main(int argc,string argv[])
{
if (argc != 2)
{
printf("Sorry\n");
return 1;
}
else
{
string h = get_string("ipt: ");
h = crypt(h,atoi(argv[2]));
}
}
string crypt(string msg,int key)
{
string c = "";
printf("%s\n",msg);
int len = strlen(msg);
for(int i = 0; i > len; i++)
{
char t = (msg[i] + key) % 26;
printf("%c",t);
}
return c;
}
我不明白问题
我尝试了很多但不要明白我不是在尝试访问内存“那不属于我”正如维基所说:-
Core Dump/Segmentation fault 是由于访问“不属于您”的内存而导致的一种特定类型的错误。
我在“Windows Microsoft Edge”上使用 cs50 ide 我的电脑 Ram 是 4 GB
。
请帮助我不明白这个问题。
输入文本后出现错误。
解决方法
对于初学者来说,如果 argc
等于 2
,那么 argv[2]
等于 NULL
。也就是说,根据 C 标准,argv[argc]
等于 NULL
。
所以你需要改变这个说法
h = crypt(h,atoi(argv[2]));
^^^^^^^
到
h = crypt(h,atoi(argv[1]));
^^^^^^^
这就是分段错误的原因。
来自 C 标准(5.1.2.2.1 程序启动)
2 如果声明,则主函数的参数应遵守 以下约束:
——argc 的值应为非负。
——argv[argc] 应为空指针。
另外,你的意思是在 for 循环中的以下条件
for(int i = 0; i < len; i++)
^^^^^^^
代替
for(int i = 0; i > len; i++)
^^^^^^^
此外,最好使用类型 size_t
而不是类型 int
。它是函数 strlen
返回的值的类型。
size_t len = strlen(msg);
for( size_t i = 0; i < len; i++)
//...
注意在函数内你没有改变原始字符串。您只是输出其转换后的字符。
在这种情况下,该函数没有多大意义,因为它似乎应该将转换后的字符串返回给调用者。
并且函数返回一个指向空字符串的指针
string c = "";
//...
return c;
没有意义。
至少应该按照以下方式定义函数。
string crypt( string msg,int key )
{
printf("%s\n",msg);
size_t len = strlen( msg );
for ( size_t i = 0; i < len; i++ )
{
msg[i] = (msg[i] + key) % 26;
printf("%c",msg[i] );
}
return msg;
}
,
Expression<Func<T,bool>> lambda =
Expression.Lambda<Func<T,bool>>(a,exp.Parameters[0]);
这表示循环从 for(int i = 0; i > len; i++)
处的 i
开始,并且仅在 0
比 i
大时才会继续 .
想一想。
如果 len
从 i
开始,它永远不会大于 0
。
循环不会运行。
您打算让循环运行而 len
小于于 i
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。