openFile(argv[1],"r");
while(characterBuff != EOF)
{
    characterBuff = fgetc(examFile);
    memoryAlloc += 1;
    string = expandRealloc(string, memoryAlloc);
    appendString(string, characterBuff);
    printf("%s\n", string);
}
closeFile();
free(string);

在下面的代码中:我从printf得到的输出给我返回值,比如[somehash]D[somehash]E[somehash]S[somehash]K
我得到的输出单词是“DESK”,但是从内存中随机抽取的东西,我做错了什么?
注意:下面是用malloc(sizeof(char))分配的,每次向字符串中添加一个字符时都会重新分配。
即我应该得到的输出应该是:

扩散系数
数据元素
办公桌
但我得到的不是我以前给你看的东西。
编辑:
char* expandRealloc(char* ptrS, size_t n)
{
    void *tmp;
    if((tmp = realloc(ptrS, n)) == NULL)
    {
        printf("Error: Memory leak possible; Closing Program");
        exit(EXIT_FAILURE);
    }
    else
    {
        ptrS = tmp;
        return ptrS;
    }
}

我为realloc编写了一个包装函数。谢谢你的帮助,但还是没能解决问题,我在打印结果的时候还是得到了一些东西。
附加字符串:
void appendString(char* inputString, int inputChar)
{
    int stringLenght = strlen(inputString);
    inputString[stringLenght - 1] = inputChar;
    inputString[stringLenght] = '\0';
}

最佳答案

当调用realloc时,它可能会移动分配的内存,因此您需要用realloc返回的值替换指针的旧内容。
尝试

char *temp_string;
    .
    .
    .
temp_string = realloc(string, memoryAlloc);
if(temp_string != NULL)
  string = temp_string;

编辑
让我印象深刻的是,这里的大部分问题是使用用户编写的函数来完成长期以来一直是标准库一部分的事情修改此代码以使用标准的lib函数而不使用特殊的包装器等,将不再困难,并将导致更高的可靠性例如,appendString函数似乎是这里遇到的许多困难的根源。如果使用strcat功能(来源为轻微mods),可以避免大量的加重和拔毛。
标准图书馆在那里有很好的理由它是一致的,可靠的,调试过的,有用的,而且是标准的。如果这里的任何人认为他们自己比为标准自由党做出贡献的数百人更聪明,那么他们很可能是错的如果有人认为他们不可能使用标准库中的函数来执行基本操作,因为他们的需求非常特殊,那么他们很可能是错的。C语言本身并不是特别特别的——让我们面对现实吧,花括号并不是什么大不了的事情————C的力量直接来自于“把一切都放在函数中”的理念——即使用函数库来完成任务。标准库是初级C程序员需要学习的最基本的东西,它的使用应该是任何有经验的C程序员的第二天性。
分享和享受。

关于c - 打印文件内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10947352/

10-11 21:46