【发布时间】:2014-01-22 17:27:45
【问题描述】:
这是代码sn-p,它属于一个更大的项目。基本上它必须存储和打印一个字符在一个文本块中出现的次数。我似乎不太明白的是如何重新分配同一个数组....
void subiect2_subpunct_c(char* nume_fisier)
{
FILE *f1;
char a;
int i = 0, j, ok;
char *caracter, *tempc;
int *frecventa, *tempf;
caracter = (char*)malloc(sizeof(char));
frecventa = (int*)malloc(sizeof(int));
f1 = fopen(nume_fisier, "r");
while (a = fgetc(f1))
{
ok = 0;
if (i == 0)
{
frecventa[i] = 1;
caracter[i++] = a;
}
else
{
for (j = 0; j < i; j++)
{
if (caracter[j] == a)
{
frecventa[j]++;
j = i;
ok = 1;
}
}
if (ok == 0)
{
tempc = (char*)realloc(caracter, (i + 1)*sizeof(char));
tempf = (int*)realloc(frecventa, (i + 1)*sizeof(int));
caracter = tempc;
frecventa = tempf;
frecventa[i] = 1;
caracter[i++] = a;
}
}
}
for (j = 0; j < i; j++)
{
printf("\n %c (%d)", caracter[j], frecventa[j]);
}
fclose(f1);
}
【问题讨论】:
-
代码不行吗?如果是这样,请解释您提供了什么输入,您期望发生什么以及实际发生什么?或者,如果你不理解部分代码,你能不能把你想理解的部分说清楚?
-
首先,get rid of the casts, they're harmful。然后,您需要构建一个演示问题的最小示例。
-
你
#include <stdlib.h>并且在64位系统上运行代码吗? -
请去掉所有不需要理解问题的东西。不要用无关紧要的台词来打扰我们;而且这里似乎有很多。
-
@alk 我包含了 stdlib,但代码在 32 位系统上运行。每次执行 realloc 时我都看不到测试的实用性,因为我使用调试器执行不起作用的程序,因此我每次都检查值,我会观察到一个 0 指针。