[英]Scan to Array of Strings
Segmentation fault (core dumped)
在C语言中,我初始化了一个字符串数组,如下所示:
char* strings[20];
然后尝试fscanf
一堆东西。
for(int i = 0; i<20; i++){
fscanf(file, "%s", strings[i]);
}
尽管该程序还有更多功能,但我确信这是导致分段错误的部分。 使用gdb的运行表明错误出在文件vfscanf
,所以我认为这是相关的。
申报后
char* strings[20]; // This is an array of pointer of type char *
您需要为每个指针分配内存,然后才能从文件中读取它们。
for(int i = 0; i<20; i++){
strings[i] = malloc(some_size * sizeof(char)); // allocate memory for each pointer first.
fscanf(file, "%s", strings[i]);
}
char* strings[20];
不初始化“字符串数组”。
相反, strings
是20个char *
指针的数组。 C中的字符串是char
数组,最多包含一个后缀'\\0'
。 到目前为止, Strings[]
数组具有不确定的值,并且所有元素均未指向字符串。
通过将这20个指针分配给各种字符串,您将获得一个“字符串数组”。
// Assign 0 (or NULL) to each pointer.
char* strings[20] = { 0 };
for(int i = 0; i<20; i++){
char buffer[100];
if (fscanf(file, "%99s", buffer) != 1) {
break;
}
strings[i] = strdup(buffer);
// or
size_t len = strlen(buffer) + 1;
strings[i] = memcpy(malloc(len), buffer, len); // error check omitted
}
请注意,如果您具有足够现代的scanf()
POSIX兼容版本(请scanf()
系统手册),则可以使用:
for (int i = 0; i < 20; i++)
{
if (fscanf(file, "%ms", &strings[i]) != 1)
…report error and break/return…
}
使用%ms
转换规范, scanf()
将使用malloc()
为读取的字符串分配适当的内存量。 完成后,不要忘记free()
内存。
请注意,Mac OS X(10.9.5 Mavericks)没有足够现代的scanf()
版本。 Linux(例如在Ubuntu 14.04中找到)可以。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.