2017-02-13 2 views
0

proc에서 정보를 추출하는 프로그램을 작성하려고합니다. 지금은 cpuinfo에서 프로세서 유형을 얻으려고합니다. 내 코드가 컴파일되지만 segfault (코어 덤프)가 발생합니다. 디버깅을 위해 lldb를 실행할 수 없습니다. 여기 내 코드는 다음과 같습니다.Segfault (코어 덤프) - lldb를 실행할 수 없습니다.

#include <stdio.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
#include <string.h> 


char cpuinfo() 
{ 
    char element[400]; 
    FILE* fp; 
    fp = fopen("/proc/cpuinfo", "r"); 
    int token_count = 0; 

    if (fgets(element, 400, fp) != NULL) 
    { 
     char *token; 
     token = strtok(element, "\n"); 
     printf("%s\n", token[4]); 
    } 


    fclose(fp); 
    return(0); 
} 

int main(int argc, char *argv[]) 
{ 
    printf("Hello world\n"); 
    cpuinfo(); 
} 
+2

"나는 실행 lldb를 얻을 수 없다"보십시오. 왜 안돼? 아마 그것에 대해 물어보십시오. – kaylum

+0

'token [4]'의 타입은'char'입니다. 'printf ("% s'는'char *'을 필요로합니다.) – BLUEPIXY

+0

컴파일러 경고는 어떻게 되나요? – kaylum

답변

0

경계 유효성 검사를 수행하지 못했습니다. 토큰에는 '4'요소가 있습니까?

printf("%s\n", token[4]); 

for (char *token = strtok(element , "\n"); token != NULL; token = strtok(NULL, "\n")) 
{ 
    puts(token); 
} 
+1

'token [4]'는'char'이고 문자열이 아닙니다. 그래서" 요소 4 "는 여전히 잘못되었습니다. – kaylum