我想扫描一个字符串并指向一个char指向这个扫描字符串的指针.
int main(int argc, char *argv[]) {
char *string;
scanf("%s",&string);
printf("%s\n",string);
}
Run Code Online (Sandbox Code Playgroud)
但是发出警告说
警告:格式'%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]);
}
}
Run Code Online (Sandbox Code Playgroud)
首先,%s在scanf()期望指向char,而不是指向指针的指针char.
引用C11,章节§7.21.6.2/ p12,fscanf()(强调我的)
s
匹配一系列非空白字符.286)
如果不存在l长度修饰符,则相应的参数应该是 指向大小足以接受序列的字符数组的初始元素的指针以及将自动添加的终止空字符.[...]
更改
scanf("%s",&string);
Run Code Online (Sandbox Code Playgroud)
至
scanf("%s",string);
Run Code Online (Sandbox Code Playgroud)
也就是说,string在实际尝试扫描之前,需要分配内存.否则,您将最终使用未初始化的指针调用未定义的行为.
| 归档时间: |
|
| 查看次数: |
16127 次 |
| 最近记录: |