代码包含一个包含两个数据成员mtype
和mtext
的结构,MAXSIZE
是该变量的最大大小。我想在mtext
中插入数据。我也有代码,但我不知道这里是如何工作的。如果还有其他方法,请告诉我。
struct msgbuf{
long mtype;
char mtext[MAXSIZE];
}sbuf;
scanf("%[^\n]",sbuf.mtext);
最佳答案
scanf("%[^\n]",sbuf.mtext);
如果第一个字符是sbuf.mtext
,则无法将任何内容扫描到'\n'
。scanf()
返回0。
扫描无穷多个字符到sbuf.mtext
中,直到遇到'\n'
并留在stdin
中,然后附加一个'\0'
。可能存在缓冲区溢出。scanf()
如果未发生溢出,则返回1。如果发生溢出,则是未定义的行为。
最好使用fgets()
读取用户输入行。
if (fgets(sbuf.mtext, sizeof sbuf.mtext, stdin) == NULL) Handle_EOF();
sbuf.mtext[strcspn(sbuf.mtext, "\n")] = '\0'; // drop potential \n
“为什么不像对%d或%f那样在'var'之前使用'&'?”一次一个问题。
关于c - 怎么用scanf(“%[^\n]”,sbuf.mtext);在下面的代码中工作?为什么我们不像%d或%f那样在'var'之前使用'&'?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32510404/