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() 中? 
| 12
 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 时,我收到错误:
| 12
 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 限定符以满足编译器的要求外,line 和 info 都是未初始化的变量。他们没有指出任何具体的事情。所以 sscanf(line,"%s", info); 将无法做任何明智的事情,这是未定义的行为。
- 
为什么您"需要 *info 成为 const char"?
- 
"我需要 *info 是一个 const char" - 不,你需要它是一个适当长的非 const 字符数组,或者一个指向适当大、动态分配的非 <x0 > 空间。无论是否动态分配,空间的内容都不能是const,因为你需要修改它们(通过sscanf)。
- 
@WeatherVane *info 应该是一个 const char 因为函数 insert() 需要一个 const char 参数
- 
问题编辑后, info 仍然需要指向分配的内存。当 sscanf 取消引用 NULL 指针时,它将崩溃。
- 
为 const 参数提供非常量参数是可以接受的,但反之则不行。
- 
@WeatherVane 好的!在不知道 info 有多大的情况下,我应该如何分配内存?
- 
这个问题太笼统了——这不是一个教程服务!您可以使用比您期望的任何输入更长的固定长度数组,例如 char info[1000]; 并使用 sscanf(line,"%999s", info); 限制输入,或者您可以跟进关于 SO 的许多类似问题,例如如何读取未知长度的输入字符串?
 
	 
 
你的代码和你想要的有一些问题。
const char* string; 声明了一个指向 char 的指针。你可以改变位置
你的指针指向的地方,你不能改变内存的内容
指针所指向的。
| 12
 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 的输入