我试图在 devC++ 和 Microsoft Visual Studio 中引入这一点:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
char* filename;
scanf(" %a[^\n]%*c",&filename);
printf("\n%s",filename);
free(filename);
system("pause");
return(0);
}
当我尝试编译代码时,我得到一个控制台,在其中引入字符串中带有空格的字符串,但之后,当程序打印字符串时,我得到一个胡言乱语。
几年前,我曾经使用此格式说明符来引入带有多个空格的字符串,现在我遇到了这个问题。这是什么?。我必须使用 C,而不是使用其他语言或其他函数(如 fgets)。
最佳答案
您的代码是一个赋值分配修饰符,它是 GNU 扩展。它在 Microsoft Visual Studio 中不可用。
不幸的是,没有简单的方法可以让它处理无限长度的字符串。如果长度可以限制为某个固定数字,请预先分配内存缓冲区,并在格式字符串中指定限制。您还可以在自动存储上预先分配缓冲区,如下所示:
char filename[261];
scanf(" %260[^\n]%*c", filename);
printf("\n%s",filename);
请注意,filename
有一个额外的 char
用于空终止。
关于C 编程(scanf 高级).....针对 C 专家程序员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30037268/