到目前为止,我已经可以尽职尽责地回答我所有的问题,但这让我很困惑。
所以。我已将此代码减少到产生错误所需的最低限度。这里是:
#include <studio.h>
struct string {
char *data;
} s;
int main(int argc, char *argv[])
{
printf("Enter a string. ");
scanf("%s\n", &s.data);
printf("%s", s.data);
return 0;
}
我正在使用gcc 4.6.3,并使用经典的防御性编程策略使用-Wall -g进行编译。
我是通过手机发布的,因此可能存在错别字和自动更正的疯狂现象。
当使用时scanf
,使用读取为字符串时unallocated pointer
,请指定'm'
强制scanf在跳过换行符时根据需要分配内存的指令。您负责freeing the memory
分配给字符串。scanf
期望提供的指针是type char**
。
scanf ("%m[^\n]%*c", &s.data);
尾随%*c
读取并丢弃尾随的换行符。(请注意,如果您只需按[enter]
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句