我想扫描一个字符串并将char
指针指向此扫描字符串。
int main(int argc, char *argv[]) {
char *string;
scanf("%s",&string);
printf("%s\n",string);
}
但发出警告说
警告:格式'%s'需要类型为'char *'的参数,但参数为2 有类型'char **'
如何在没有警告的情况下扫描char *
中的字符串。
编辑:它对下面的代码起作用并发出警告,我将其深入到上面的代码中,因此非常具体。
int main(int argc, char *argv[]) {
int n = 2;
char *strings[2];
for(int i = 0; i < n; i++){
scanf("%s",&strings[i]);
printf("%s\n",&strings[i]);
}
}
答案 0 :(得分:5)
首先,%s
中的scanf()
需要指向char
的指针,而不是指向char
指针的指针/ em>的。
引用C11
,章节§7.21.6.2/ p12,fscanf()
(强调我的)
s
匹配一系列非空白字符。 286)
如果不存在l
长度修饰符,则相应的参数应为a 指向字符数组的初始元素的指针大到足以接受 序列和终止空字符,将自动添加。 [...]
更改
scanf("%s",&string);
到
scanf("%s",string);
也就是说,在实际尝试扫描之前,需要将内存分配给string
。否则,您最终将使用未初始化的指针调用undefined behavior。