我有一个类作业,需要获取一个txt文件,并显示、添加和删除键(int)和值(string)。
我想为每一个使用一个动态数组(我的教授说如果我这样做可以得到额外的学分)。目前,这就是我所拥有的,我读了txt文件,我把它们添加到数组中。
1.我不知道是否需要为任何单词创建一个具有足够内存的字符串,然后将其复制到一个更小的字符以获得更少的内存(strcpy(savStr, userStr);
)
1.我不确定是否正确地执行了动态数组,也不确定如何添加更多索引
1.我不知道是否正确地向数组添加了内存
int main(int argc, char **argc) {
int userNumber; //to take in user key and key in file
char userStr[1000]; //initial string to take value from user and string
int strL = 1; //find string length of value to find correct memory need to allocate
char savStr[strL]; //value with memory allocate for the size of the string
FILE *fp;
fp = fopen("values.txt", "r");
int *keyArry;
keyArry = (int *)calloc(8, sizeof(int));
char *valueArry;
valueArry = (char *)calloc(8, sizeof(char));
int curr = 0;
while (fscanf(fp, "%d,%s", &userNumber, userStr) != EOF) {
strL = strlen(userStr);
savStr[strL];
strcpy(savStr, userStr);
printf("%d - %s \n", cuserNumber, savStr);
keyArry[curr] = userNumber;
strcpy(&valueArry[curr], &savStr);
curr++;
}
fclose(fp);
for (int i = 0; i < 7; i++) {
printf("%d - %s \n", keyArry[i], &valueArry[i]);
}
这是txt文件
1,one
2,two
3,three
4,four
5,five
6,six
7,seven
这是添加到数组中的内容
1条答案
按热度按时间3zwjbxry1#
代码有未定义的行为,因为
char savStr[strL];
定义了一个长度为1
的char
数组,刚好够空字符串。复制任何更大的内容会导致未定义的行为。请改用char savStr[1000];
。阅读完其余代码后,似乎根本不需要这个额外的数组。还要注意,
char *valueArry;
定义了一个指向char
的指针,您可以将其初始化为指向8个char
的数组,而应该定义一个指向char *
的数组的指针并正确地初始化它。您的教授希望您使用动态数组,因此如果要存储的元素数量超过分配的长度,您可能需要重新分配它们。
以下是修改后的版本: