c - 将文件中的字符串分配给字符串数组时遇到问题

标签 c arrays string file memory

作业是从文本文件中读取单词,然后将其反向打印到另一个文本文件中。我无法将我读到的单词放入数组中。我不应该分配比保存每个字符串所需的更多内存,因此我能想到的唯一解决方案是将每个单词放入 tempString 中,测量其长度,然后分配足够的内存来保存它并移动到下一个单词。我的困惑是为什么每次迭代数组中的每个单词都会改变。我预计最后一行是 Fivefour Threetwoone。

我还认为我的方法有点草率,因为字符串长于 tempString 的长度会导致问题,但我也想不出解决方案。

这是我的代码。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*
 * 
 */

char** readWords(int* nPtr);

int main() {
    int numWords = 0;

    readWords(&numWords);

    return 0;
}



char** readWords(int* nPtr){
    int i = 0;
    int listIndex = 0;
    char tempChar = 0;
    char** stringArray = NULL;
    char tempString[50] = {};

    FILE *inputfile=fopen("inputfile.txt","r");
    fscanf(inputfile,"%d\n",nPtr); //Makes numWords = integer on first line

    stringArray = calloc(*nPtr, sizeof(char*));

    for(i=0;i<*nPtr;i++){
        fscanf(inputfile,"%s", tempString);
        stringArray[*nPtr-1-i] = calloc(strlen(tempString)+1, sizeof(char));
        stringArray[*nPtr-1-i] = tempString;
        printf("tempString: %s\n",tempString);
        printf("stringArray index: %d\n",*nPtr-1-i);
        printf("stringArray: %s%s%s%s%s\n",stringArray[0],stringArray[1],stringArray[2],stringArray[3],stringArray[4]);
    }


    fclose(inputfile);

}

这是我的输出

tempString: one
stringArray index: 4
stringArray: (null)(null)(null)(null)one
tempString: two
stringArray index: 3
stringArray: (null)(null)(null)twotwo
tempString: three
stringArray index: 2
stringArray: (null)(null)threethreethree
tempString: four
stringArray index: 1
stringArray: (null)fourfourfourfour
tempString: five
stringArray index: 0
stringArray: fivefivefivefivefive

RUN SUCCESSFUL (total time: 64ms)

这是我的输入文件

5
one
two
three
four
five

非常感谢您的建议

最佳答案

实际上,所有数组元素都被分配了 tempString 值,因此它们都指向相同的占位符,因此最后它们都指向存储到 tempString 中的最后一个值。修复方法是将 tempString 的内容复制到相应数组元素的已分配占位符中:

strcpy( stringArray[*nPtr-1-i], tempString );

关于c - 将文件中的字符串分配给字符串数组时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26311176/

相关文章:

关于字符串中多个 %s 的 python

c - C 中的结构数组

python - 如何按轴对 numpy 数组进行排序并保留行

php - mysql查询在php中存储字符串数组SQL语法错误

c - 为什么此函数无法成功确定两个任意字符串是否相同?

PHP/MYSQL - 将表字段保存为单独的字符串变量

c - 如何使用 && 和 || 评估这些 fork() 调用C 中的运算符?

c - 完整文件的 Frama-C 图

c - 错误: expected expression before ',' token

javascript - 如何从数组中删除每第 N 个元素