gpt4 book ai didi

c - scanf 字符指针中的字符串

转载 作者:行者123 更新时间:2023-12-03 14:04:34 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Crash or "segmentation fault" when data is copied/scanned/read to an uninitialized pointer

(5 个回答)


5年前关闭。




我想扫描一个字符串并指向一个 char指向此扫描字符串的指针。

int main(int argc, char *argv[]) {

char *string;
scanf("%s",&string);
printf("%s\n",string);

}

但给出警告说

warning: format '%s' expects argument of type 'char *', but argument 2 has type '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

最佳答案

首先,%sscanf()期望指向 char 的指针, 不是指向 char 的指针.

报价C11 , 章节 §7.21.6.2/p12, fscanf() (强调我的)

s
Matches a sequence of non-white-space characters.286)

If no l length modifier is present, the corresponding argument shall be a pointer to the initial element of a character array large enough to accept the sequence and a terminating null character, which will be added automatically. [...]



改变
scanf("%s",&string);


scanf("%s",string);

也就是说,您需要将内存分配给 string在你真正尝试扫描它之前。否则,您最终将使用调用 undefined behavior 的未初始化指针。 .

关于c - scanf 字符指针中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37921081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com