我想读取数组中的一组字符串。数组的大小将在运行时使用 malloc
或 alloc
决定,即接受字符串的数量作为输入。我尝试了以下代码,但它不起作用。
char *array;
array=(char*)malloc(sizeof(char)*t); //t is the size of array
for(int temp=0;temp<t;temp++)
{
gets(a[temp]);
}
同样适用于整数数组。
请帮助我找到解决方案。
最佳答案
C 没有任何用于存储字符串的自动内置支持,没有变量是“字符串”,并且可以自动增长以容纳适当数量的字符。你需要自己分配内存。
您现在正在做的是为适当数量的字符指针分配位置,而不是为任何字符分配位置。所以 gets()
调用正在写入未分配的内存,这是未定义的行为。由于整数完全适合每个分配,这就是为什么类似的代码适用于整数。字符串更复杂,因此您需要做更多的工作。
如果这些字符串的长度有任何已知的上限,您可以使用固定长度的临时缓冲区,然后在知道所需的大小后将其复制到新分配的动态内存中。如果没有这样的界限,您需要重复相同的概念,通过读取固定 block ,存储它,如果没有找到行尾,则读取另一个 block ,使用 realloc()
增加此字符串的内存分配。 , 附加新字符,并重复直到该行结束。
作为旁注,您应该始终避免使用 <a href="http://linux.die.net/man/3/gets" rel="noreferrer noopener nofollow">gets()</a>
,因为它不支持保护您的程序免受缓冲区溢出。使用同一页面上记录的 fgets() 会好得多。
关于c - C中读取字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10496099/