2012-12-09 2 views
0

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

    return(0); 
} 
+1

이 C에서 귀하는 segfault의 원인이 있지만, 배열이 제로를 기반으로하지 않습니다. 귀하의 루프는 i = 0으로 시작해야합니다. –

답변

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

%sconst char * 기대 잘못이고, 당신은 그것을 char을 제공하고 있습니다. %c 형식 지정자는 개별 문자 인쇄용이므로이 줄을

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

으로 변경하십시오.

또한 C에서는 배열이 0부터 시작하므로 을 사용하여 i을 0으로 초기화해야합니다.

+0

근무 해 주셔서 감사합니다. –

2

문자를 문자로 인쇄하므로 %s 대신 %c을 사용하십시오.

%s은 문자열을 예상하지만 s[i]은 실제로 char입니다.

strlen(s) 번으로 전화 할 때마다. 그리고 strlen은 변경되지 않으므로 하나의 변수를 사용하고 루프에 들어가기 전에 한 번만 호출하는 것이 좋습니다. 이 같은

더 최적화 방법 :

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

최적화에 대한 좋은 지적이지만, 컴파일러가 어쨌든 그것을 만들 것입니다. –

+1

@ H2CO3 : 네,하지만 좋은 프로그래밍 기술을 따르는 것이 낫습니다. – Omkant

+0

물론 볼 수 있습니다 :) –

관련 문제