该分配是从文本文件读取单词,然后将它们反向打印到另一个文本文件。我在将读入的单词放入数组中时遇到问题。我不应该分配更多的内存来保存每个字符串,所以我能想到的唯一解决方案是将每个单词放在tempString中,测量它的长度,然后分配足够的内存来保存它并移动到下一个单词。我的困惑是为什么每次迭代都会改变数组中的每个单词。我希望最后一行是五四四。将文件中的字符串分配给字符串数组遇到困难
我也认为我的方法是马虎,因为具有比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
建议是非常赞赏
您忘记将临时字符串复制到您为数组分配的空间中。 – michaelmeyer 2014-10-11 04:54:53
这段代码有许多错误。最可怕的是你每次看到'ptr = some-allocation-function(...);'后面跟着'ptr =别的东西;'你只是(a)复制一个地址;不是一块内存,和(b)在两条短行内泄漏内存(只比记录多一个内存;一个没有分配的空白'malloc')。快速修复是一个'strcpy'而不是一个任务,但是这个代码真的需要更多的帮助。 – WhozCraig 2014-10-11 05:03:02
谢谢,我用strcpy,它现在可以工作。我没有完全想到字符串是c中的指针而不是数据类型。你介意在我的代码中列出其他一些错误的东西吗? (b)我不知道你的意思。不calloc初始化内存为空?你没有分配什么意思。我对动态内存分配很陌生。 – Esoremada 2014-10-11 05:24:31