循环遍历 C 中的字符串会导致分段错误(核心转储)



对于下面的代码,我得到了

Segmentation fault (core dumped)

错误消息,有人可以帮我吗?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
    char s[] = "helloWorld";

    int i;
    for(i = 1; i < strlen(s); i++)
    {
        printf("Letter is %sn", s[i]);
    }
    return(0);
}
printf("Letter is %sn", s[i]);

错了,%s期待一个const char *,而你却在给它一个char。将此行更改为

printf("Letter is %cn", s[i]);

因为%c格式说明符用于打印单个字符。

此外,在 C 中,数组从零开始,因此您也应该使用 i = 0;i初始化为零。

您正在逐个字符打印,因此请使用%c而不是%s

%s需要一个字符串,但s[i]实际上是一个字符。

还有每次你打电话给strlen(s)。而且strlen没有改变,所以最好对它使用一个变量,在进入循环之前只调用一次。

像这样更优化的方式:

int len=strlen(s);
for(i = 0; i < len; i++)
    {
        printf("Letter is %cn", s[i]);
    }

相关内容

  • 没有找到相关文章

最新更新