该程序的目标是从终端获取用户输入,然后打印出用户输入的每个单词的最后一个字符。
例如," Hello World"应该打印出来" od"。
这是代码。当我尝试调整char指针的大小时,我不确定我的错误在哪里。代码如下。
只有在gcc
的参数中使用-fsanitize = address时才会出现此问题#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("%s\n", shortened);
return 0;
}
答案 0 :(得分:2)
你想重新分配i
个字符,加上一个空终止符,所以改变它(它只分配一个字符):
shortened = realloc(shortened, 1 * (sizeof(char)));
到此:
shortened = realloc(shortened, (i + 1) * (sizeof(char)));
答案 1 :(得分:0)
您对realloc的调用始终只分配一个字符。你不想要我的角色吗? 的realloc(的sizeof(字符)*(1 + I));
答案 2 :(得分:0)
首先,回答你的问题 - realloc
得到新尺寸的第二个参数,而不是尺寸的增加。您需要使用您拥有的单词数量,并相应地更改大小。
其次,argv
包含命令行参数,这意味着在可执行文件名后面写入了令牌。要获得用户的输入,您可能需要使用scanf
。