c - 为什么我的代码会出现段错误?

标签 c

我一直收到段错误,我该如何解决。我尝试了更多变体,但每次使用 if 语句时都会出现段错误。我的代码与此类似:

#include <stdio.h>
#include <string.h>

int main()
{
    int i;
    char *sentence[300];
    fgets(*sentence,300,stdin);
    int length=strlen(*sentence);
    for(i=0;i<length;i++){
        if(sentence[i]=="a")
            printf("qwer");
        else if(sentence[i]=="b")
            printf("asdf");
        else if(sentence[i]=="c")
            printf("zxcv");
//      ...
    }
    return 0;
}

最佳答案

你做错的第一件事是:

char *sentence[300];

看起来您正在尝试创建一个包含 300 个字符的缓冲区,但实际上您正在创建一个包含 300 个字符的指针数组。将其更改为:

char sentence[300];

然后你想改变这个:

fgets(*sentence,300,stdin);

fgets(sentence,sizeof(sentence),stdin);

那你想改

int length=strlen(*sentence);

int length=strlen(sentence);

您需要很好地理解字符串在 C 中的工作原理。如果您还没有读过一本很好的 C 入门书籍,请从那里开始。 C 不是您仅通过阅读网络上的随机页面和 StackOverflow 就能掌握的东西。

关于c - 为什么我的代码会出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54953237/

相关文章:

c - 用户定义的减少每次运行都不会返回预期结果

c - 如何绑定(bind)/连接多个 UDP 套接字

C 程序编写不正确

c - 初始化代码放在哪里更好,在循环之前还是在循环内部?

c - 稍微修改我的代码后出现段错误

c - 在 OpenMP 中,线程如何使用具有全局范围的变量的不同值?

c - 为什么我同样的 C 代码在编译时会产生不一致的结果

c - 设置 GTK 容器子级的属性

iphone - 在 mac 中制作 arm 架构 c 库

带参数调用Linux服务