关于指针:c:将 const char* 读入 sscanf 中的变量?

c: reading const char* into a variable in sscanf?

我正在尝试将字符串/*char 扫描到变量中并将其传递给函数,但我收到错误 "format specifies type 'char *' but the argument has type 'const char *'"。我需要 *info 成为一个 const char,但如果我改变它,我会得到其他错误。

如何将 const char *info 正确扫描到 sscanf() 中?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main(int argc, char** argv) {
    blk *block;
    char *line;
    const char *info;

    block = block_new();

    printf("insert info");

    while ( (line = readline()) != NULL) {
        sscanf(line,"%s", info);
        insert(block, info);
        free(line);  
    }    
}

插入:insert(blk *block, const char *info)

当我更改为 char *info 而不是 const char 时,我收到错误:

1
2
3
4
5
warning: variable 'info' is uninitialized when used here
sscanf(line,"%s", info);

note: initialize the variable 'info' to silence this warning
    char *info; = NULL


你的代码和你想要的有一些问题。

const char* string; 声明了一个指向 char 的指针。你可以改变位置
你的指针指向的地方,你不能改变内存的内容
指针所指向的。

1
2
3
4
5
6
7
8
const char *string ="Hello";
char line[] ="a b c";

string ="World"; // legal
string[0] = 'w';  // illegal

string = line;    // legal
string[0] = 'A';  // illegal

所以使用 const char* 来读取带有 scanf 的输入