格式'%s'需要'char *'类型的参数,但参数2的类型为'char **'

时间:2013-09-14 03:18:10

标签: c warnings

我有这个C代码:

#include <stdio.h>
#include <stdlib.h>
int main(){
    char *bitstr;

    printf("Enter a bitstring or q for quit: ");
    scanf("%s", &bitstr);
    return 0;
}

我一直收到以下错误。我究竟做错了什么?

warning: format '%s' expects argument of type 'char *', but 
argument 2 has type 'char **' [-Wformat]

2 个答案:

答案 0 :(得分:1)

试试这个:

#include <stdio.h>
#include <stdlib.h>

#define MAX 100

int main(){
    char bitstr[MAX] = "";

    printf("Enter a bitstring or q for quit: ");
    scanf("%s", &bitstr);

    // or fgets(bitstr);

    return 0;
}

尝试定义或分配字符串/字符数组的大小。

答案 1 :(得分:1)

char中的scanf()数组的传递地址,而不是char*的地址。
2 确保您不会覆盖您的目标缓冲区 3 正确调整缓冲区需求。从其他帖子中可以看出,您需要int的二进制文本表示。假设您的int是8个字节(64位)。

#include <stdio.h>
#include <stdlib.h>
int main(){
    char bitstr[8*8 + 1];  // size to a bit representation of a big integer.
    printf("Enter a bitstring or q for quit: ");
    //Change format and pass bitscr, this results in the address of bitscr array.
    scanf("%64s", bitstr);
    return 0;
}

我更喜欢fgets()&amp; sscanf()方法。

char buf[100];  // You can re-use this buffer for other inputs.
if (fgets(buf, sizeof(buf), stdin) == NULL) { ; /*handle error or EOF */ }
sscanf(buf, "%64s", bitstr);