scanf char指针中的字符串

时间:2016-06-20 11:12:57

标签: c pointers scanf

我想扫描一个字符串并将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]);
    }

}

enter image description here

1 个答案:

答案 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