2011-12-01 3 views

답변

2

:

const char *str = ... // = source string 
while (str[0]) { 
    char buffer[100]; 
    int n; 
    sscanf(str, " %99[^\r\n]%n", buffer, &n); // note space, to skip white space 
    str += n; // advance to next \n or \r, or to end (nul), or to 100th char 
    // ... process buffer 
} 

내가 strtok() 또는 strpbrk()를 사용하는 것을 선호하지만

. 예를 들어 :

char *str = ... // = source string--not constant, as it gets destroyed 
char *out = strtok(str, "\r\n"); 
while (out) { 
    // ... process 'out' 
    out = strtok(0, "\r\n"); // advance to next part 
} 
+0

당신은 캐리지 리턴에 strok의 사용의 몇 가지 예제를 보여줄 수있을 하는가? – lacas

+1

이 답변이 도움이 되었습니까? –

+1

신의 축복이 있습니다! 나는 2 시간 동안 이것과 고투했다! 어느 엄청나게 비밀스런 해결책인가! – gideon

1

scanf은 문자열을 분할하지 않으므로 구문 분석합니다. 당신이 (포함되지 않음) 캐리지 리턴 또는 줄 바꿈까지 읽고 싶다면, 당신은 사용할 수 있습니다

char buffer[100]; 
scanf("%99[^\r\n]", buffer); 

을 당신이 단지는 fgets를 사용하고 원치 않는 후행 문자를 제거 떨어져 아마 더 좋을 것 같아하지만. 두 번째 부분이 시작되면 결정하기 위해, 약간 크리스의 답변을 수정

관련 문제