[英]C allocate a string without knowing the numbers of characters
我需要获取一个字符串而不需要长度,我创建一个100字符的缓冲区,当它已满时我做一个realloc为字符串末尾的char添加一个空格
这是我的代码......你能帮帮我吗?
#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;
}
这里有几个问题:
strcat
! 您应该将指针传递给\\0
终止的字符串,而不是指向单个字符的指针。 这只是偶然的。 strlen()
。 strlen()
。 循环完成后,设置终止\\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';
应该做你想做的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.