代码包含一个包含两个数据成员mtypemtext的结构,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/

10-10 05:07