我有以下代码:
#include <stdio.h>
#include <string.h>
char* get_cpu_vendor_id ()
{
FILE* fp;
char buffer[1024];
size_t bytes_read;
char* match;
char* vendor_id;
fp = fopen ("/proc/cpuinfo", "rb");
bytes_read = fread (buffer, 1, sizeof (buffer), fp);
fclose (fp);
if (bytes_read == 0 || bytes_read == sizeof (buffer))
return 0;
buffer[bytes_read] == '\0';
match = strstr (buffer, "vendor_id");
printf("%s", match);
if (match == NULL)
return 0;
sscanf (match, "vendor_id : %s", vendor_id);
return vendor_id;
}
int main ()
{
printf ("Vendor ID Of The Processor: %s\n", get_cpu_vendor_id ());
return 0;
}
它工作正常,但我不想打印大量信息,所以当我删除语句printf("%s", match);
函数get_cpu_vendor_id()
时,返回任意值,我无法理解
答案 0 :(得分:1)
sscanf (match, "vendor_id : %s", vendor_id);
在使用sscanf
:
vendor_id = malloc(some_size);
在这里:
buffer[bytes_read] == '\0';
您要将尾随字符与0进行比较,您需要:
buffer[bytes_read] = '\0';
最后,请注意"%s"
停止扫描第一个空白字符,在本例中为
vendor_id : GenuineIntel
在:
之后停止,使用"%[^\n]"
消耗整行。
答案 1 :(得分:0)
vendor_id没有分配任何内存,你应该使用malloc分配内存然后使用它