微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

For循环不在c语言cs50 ide中运行 循环不会运行

如何解决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;
}

在这代码中它说 Segmentation Fault

我不明白问题

我尝试了很多但不要明白我不是在尝试访问内存“那不属于我”正如维基所说:-

Core Dump/Segmentation fault 是由于访问“不属于您”的内存而导致的一种特定类型的错误

我在“Windows Microsoft Edge”上使用 cs50 ide 我的电脑 Ram 是 4 GB

代码应该输出 input: 文本的编码版本。

请帮助我不明白这个问题。

输入文本后出现错误

解决方法

对于初学者来说,如果 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 开始,并且仅在 0i 时才会继续 .

想一想。
如果 leni 开始,它永远不会大于 0

循环不会运行。

您打算让循环运行len 小于i

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。