繁体   English   中英

为什么我的数组的每个元素都会自动变成最后一个元素?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM