2017-02-13 49 views
0

我正在尝试编写一个程序,从proc中提取信息。现在我正试图从cpuinfo获取处理器类型。我的代码编译,但我得到一个段错误(核心转储)。我无法运行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