我需要一个字符串而不需要长度, 我创建了一个100字符的缓冲区,当它已满时我会重新分配一个字符串末尾的字符空间
这是我的代码......你能帮助我吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
char *content = malloc(10*sizeof(char));
char c;
content[0]='\0';
while ((c = getchar()) != EOF)
{
if (strlen(content) < 10){
strcat(content, &c);
content[strlen(content)+1] = '\0';
}
else {
content=realloc(content,sizeof(char)*(strlen(content))+2);
strcat(content, &c);
content[strlen(content)+1] = '\0';
}
}
printf("%s",content);
return 0;
}
答案 0 :(得分:2)
这里有几个问题:
strcat
!您应该将指针传递给\0
终止的字符串,而不是指向单个字符的指针。这只是偶然的。strlen()
。strlen()
。循环完成后,设置终止\0
一次。答案 1 :(得分:0)
你应该做@cnicutar建议的事情:
content[index] = c;
此外,您的代码还有另一个问题。当您将“c”连接到“content”时,您将覆盖“content”末尾的“\ 0”。请记住,strlen会查找'\ 0'。
另一个问题是:
content[strlen(content)+1] = '\0';
当您的strlen为9时,您将在内容[10]上放置'\ 0'。您已经分配了大小为10的“内容”,因此它意味着它从内容[0]转到内容[9]。
一个简单的
content[strlen(content)] = '\0';
应该做你想做的事。