C 编程(scanf 高级).....针对 C 专家程序员

标签 c

我试图在 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/

相关文章:

c - 在http请求中记录xml内容

c - Linux 上的 vsnwprintf 替代方案

C - 使用指针和函数的 for 循环出现段错误

c - 大指针中的规范化是什么意思

c - 指向不同对象的指针的相等性比较

如果独立运行,gdb 下 Linux 上的 C 代码运行会有所不同吗?

c - for 循环的值意外下降

c - 看门狗在高中断率时触发

c - 标题和函数原型(prototype)的最佳策略

c - 在头文件的声明中定义结构的值