c字符串,char指针:需要帮助打印字符串和一些建议

zig*_*oyo 1 c string pointers scanf char

到目前为止我有这个代码:

char *str;
scanf ("%s", &str);
printf("%s",&str);
system("pause");
Run Code Online (Sandbox Code Playgroud)

它工作,但问题是我按一个键继续该程序(或结束它),我得到以下错误:

运行时检查失败#2 - 变量'str'周围的堆栈已损坏.

我之前从未使用过char指针,我想得到一个解释,为什么我得到这个错误以及如何改进我从用户收到字符串输入的格式.我知道有更简单的方法,但我的最终目标是获得最简单的代码来确定输入的大小,而不是限制用户.

提前致谢

Nic*_*laz 6

问题的第二部分(事先确定输入的长度)不可能通过简单的scanf(除了更复杂和按块读取/附加块).

但至少下面的代码修复了你对随机内存的覆盖.

char buffer[256];
char *str= buffer;
scanf ("%s", str);  // or scanf ("%s", buffer);  or scanf("%s", &buffer[0]);
printf("%s", str);  // or printf("%s", buffer);  or printf("%s", &buffer[0]);
system("pause");
Run Code Online (Sandbox Code Playgroud)

您可以事先使用非常大的缓冲区,然后将结果修剪回给定长度,但是您需要最大值.开始的长度.

char *str= (char *)calloc(1,10000);
scanf ("%.9999s", str);
str= (char *)realloc(str, strlen(str)+1);  // release excess memory 
printf("%s", str); 
free(str);
system("pause");
Run Code Online (Sandbox Code Playgroud)