c - C中读取字符串数组

标签 c arrays string

我想读取数组中的一组字符串。数组的大小将在运行时使用 mallocalloc 决定,即接受字符串的数量作为输入。我尝试了以下代码,但它不起作用。

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/

相关文章:

c - 释放链表中的前一个节点

c# - 将 Int 值设置为数组时抛出 IndexOutOfRange 异常

c - if (!msize) 是什么意思?

c - 如何在C中保存do...while状态/进度?

java - 将句子的下一个单词存储在字符串中

java - 遍历数组的边缘成员时数组索引越界

C - 使用字符指针替换文件中的字符串

r - 在变量中搜索字符串并返回匹配的字符串

java - 在 Spring Batch 步骤中引用命令行参数

c - 解析配置文件中带有前导和终止空格的简单名称/值对设置 - C