程序的目标是从终端中获取用户输入,然后打印出用户输入的每个单词的最后一个字符。
例如," 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));