当我首先打印char **姓氏和char **时,我得到一些奇怪的输出。我不确定我是否正确地做了malloc或者如果我不正确地做其他事情。字符串数组访问错误
输入 - >names1.txt
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int size, i;
char **surname, **first, *middle_init, dummy, str[80];
FILE *fp_input = fopen("names1.txt", "r");
fscanf(fp_input, "%d%c", &size, &dummy); // gets size of array from file
/* dynamic memory allocation */
middle_init = (char*)malloc(size * sizeof(char));
surname = (char**)malloc(size * sizeof(char*));
first = (char**)malloc(size * sizeof(char*));
for (i = 0; i < size; i++)
{
surname[i] = (char*)malloc(17 * sizeof(char));
first[i] = (char*)malloc(17 * sizeof(char));
} // for
/* reads from file and assigns value to arrays */
i = 0;
strcpy(middle_init, "");
while (fgets(str, 80, fp_input) != NULL)
{
surname[i] = strtok(str, ", \n");
first[i] = strtok(NULL, ". ");
strcat(middle_init, strtok(NULL, ". "));
i++;
} // while
/* prints arrays */
for (i = 0; i < size; i++)
printf("%s %s\n", surname[i], first[i]);
return 0;
} // main
该代码泄漏surname [i]的初始for循环中的所有动态分配,并在处理第二个for循环时泄漏第一个for循环,然后在退出main()之前泄漏剩余部分。 – WhozCraig
您为'surname [i]'分配内存,然后将'surname [i]'设置为不同的指针,从而失去了分配的内存块。您应该将'str'的标记化部分*复制到'surname [i]'中。 – DCoder
你从不检查'strtok'函数的失败。 –