c语言 - 无法在循环时在 getline() 之外打印字符**



尝试使用 getline(( 从命令行参数读取文件并存储到 char** 中,但是当我尝试像使用 printf(( 一样访问内部数据时,它什么也没打印。尽管 printf(( 在每个 getline(( 之后的 while 循环中工作正常。

任何帮助将不胜感激!

int main (int argc, char* argv[])
{
//open file
FILE *stream = NULL;
char *line = NULL;
size_t len = 0;
ssize_t nread;
if (argc != 2)
{
fprintf(stderr, "Usage: %s <file>n", argv[0]);
exit(EXIT_FAILURE);
}
stream = fopen(argv[1], "r");
if (stream == NULL)
{
perror("fopen");
exit(EXIT_FAILURE);
}
//read file line by line
char ** input = NULL;
int i = 0;
int j = 0;
while ((nread = getline(&line, &len, stream)) != -1)
{
j++;
input = (char **)realloc(input, sizeof(char*) * j);
input[i] = (char *)malloc(sizeof(char) * strlen(line));
input[i] = line;
//print each line (PRINTS FINE)
printf("%s",input[i]);
i++;
}
//print each line outside of while loop (PRINTS NOTHING)
for (int z = 0; z < j ; z++)
{
printf("%s",input[z]);
}
}

欢迎尝试使用任何这样的.txt文件

./a.out input.txt

您的问题不是打印。它在阅读和存储中。

  1. sizeof(char) * strlen(line)必须sizeof(char) * (strlen(line) + 1)(您没有为 NULL 终止符分配空间(。事实上,(strlen(line) + 1)就足够了(请参阅@user3629249的评论(,甚至(len + 1)(因为len保存读取字符串的长度(。

  2. input[i] = line;不会创建字符串的副本。您必须使用strcpy(input[i], line);

  3. 最后
  4. ,您必须在最后free(line)

相关内容

  • 没有找到相关文章

最新更新