循环通过C中的字符串给出分段错误(核心转储)

时间:2012-12-09 14:53:50

标签: c segmentation-fault

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

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 %s\n", s[i]);
    }

    return(0);
}

2 个答案:

答案 0 :(得分:3)

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

错误,%s期望const char *,而您正在给它char。将此行更改为

printf("Letter is %c\n", s[i]);

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

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

答案 1 :(得分:2)

您要逐个字符打印,因此请使用%c代替%s

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

每次拨打strlen(s)时也是如此。并且strlen没有改变,所以最好使用一个变量并在进入循环之前只调用一次。

更优化的方式:

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