我用C编写了一个简单的代码,可以扫描并打印带有空白的字符串:

#include <stdio.h>
#include <string.h>
int main()
{
   char myName[50];
   printf("Enter your name: ");
   scanf("%[^\n]s", &myName);
   printf("Your name is: %s", myName);
   return 0;
}

编译器(gcc,mac上Xcode附带的命令行工具的一部分)返回以下错误:
name.c: In function ‘main’:
name.c:7: warning: format ‘%[^
’ expects type ‘char *’, but argument 2 has type ‘char (*)[50]’
name.c:7: warning: format ‘%[^
’ expects type ‘char *’, but argument 2 has type ‘char (*)[50]’

这里有什么问题?
注意:我需要使用scanf。我没有fgets:(

最佳答案

您应该传递给scanf类型的char*参数(format%[^\n]s应该是这样),但在您的代码中:

char myName[50];
scanf("%[^\n]s", &myName);

您传递myName数组的地址(即char (*)[50])。您应该将其更改为:
scanf("%[^\n]", myName);

或:
scanf("%[^\n]", &myName[0]);

关于c - 在带空格的字符串上的scanf问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19059318/

10-11 20:57