[英]Why does each element of my array automatically turn into the last element?
char *string[n];
for (int i = 0; i < n; i++) {
char string[60];
fscanf(fptr, "%s%*[^\n]", string);
strings[i] = string;
printf("%s\n", strings[i]);
}
puts("Ended");
for (int i = 0; i < n; i++) {
printf("%s\n", strings[i]);
这是我在 C 中的代码的一部分 ^。 strings[]
包含指向文件中每一行的第一个单词的指针。 因此,如果我的文件包含:
ABC 123 DEF 123 GHI 123
我得到以下 output:
ABC DEF GHI Ended GHI GHI GHI
这意味着初始化没有问题。 那到底是怎么回事?
当你写道:
strings[i]=string
您没有将原始字符串复制到数组中,因为“字符串”变量仅包含堆栈分配字符串的指针(内存地址)。 当您 go 进入 for 循环的下一次迭代时,堆栈分配的“字符串”变量将被释放/丢弃。
因此,您的“字符串”数组包含指向未分配 memory 的指针。 您应该改用“strcpy”。 如果“strings”数组的大小不固定,请使用“malloc”,然后使用“strcpy”。
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fptr = fopen("test.txt", "r");
char strings[10][60];
int n = 3;
for (int i = 0; i < n; i++)
{
char string[60];
fscanf(fptr, "%s%*[^\n]", string);
strcpy(strings[i], string);
printf("%s\n", strings[i]);
}
puts("Ended");
for (int i = 0; i < n; i++)
{
printf("%s\n", strings[i]);
}
}
或者,更简单:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fptr = fopen("test.txt", "r");
char strings[10][60];
int n = 3;
for (int i = 0; i < n; i++)
{
fscanf(fptr, "%s%*[^\n]", strings[i]);
printf("%s\n", strings[i]);
}
puts("Ended");
for (int i = 0; i < n; i++)
{
printf("%s\n", strings[i]);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.