在此简单C程序中分配内存时,我会在哪里出错



程序的目标是从终端中获取用户输入,然后打印出用户输入的每个单词的最后一个字符。

例如," Hello World"应该打印出" OD"。

这是代码。当我尝试调整Char指针大小时,我不确定在哪里出错。代码如下。

此问题仅在我使用-fsanitize =地址的gcc

参数中发生时发生。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
    char *shortened = NULL;
    int i = 1;
    while(argv[i] != NULL)
    {
        shortened = realloc(shortened, 1 * (sizeof(char)));
        int length = strlen(argv[i]);
        char* curWord = argv[i];
        shortened[i-1] = curWord[length -1];
        i++;
    }
    printf("%sn", shortened);
    return 0;
}

您想realloc i字符,以及一个用于零终端的字符,因此更改此此事(仅分配一个字符):

shortened = realloc(shortened, 1 * (sizeof(char)));

shortened = realloc(shortened, (i + 1) * (sizeof(char)));

首先,要回答您的问题-realloc作为第二个参数新大小,而不是大小的增加。您需要使用您有多少个单词的计数,并相应地更改大小。

第二,argv包含命令行参数,意思是以可执行名称后写的令牌。要从用户获取输入,您可能需要使用scanf

您对Realloc的呼叫仅分配一个字符。你不想要我角色吗? realloc(sizeof(char)*(1 i));

最新更新