fscanf - 使用太长的字符串

时间:2009-06-04 20:16:51

标签: c

char first [10];

char second [10];

fscanf是什么(fr,“%s%s \ n”,第一,第二);当第一个字符串太长时做什么?

我可以先使用char *而不使用malloc吗?并且指针将显示给字符串?

3 个答案:

答案 0 :(得分:3)

您可以使用宽度(即“%9s”)来限制字符串的大小。例如,请参阅Microsoft's documentation

使用指针而不将其初始化为任何东西是让程序崩溃或表现不佳的可靠方法。

答案 1 :(得分:2)

如果你正在使用glibc,你可以一次解决这两个问题 - 使用%as格式说明符。

它会自动分配足够大的字符串来保存内容。

像这样:

char *first, *second;

scanf(fp, "%as %as\n", first, second);

注意:这是GNU扩展名!

答案 2 :(得分:1)

当第一个字符串太长时,会遇到buffer overflow.

的问题

至于你问题的第二部分,如果你不使用malloc,那么它将指向垃圾内存。字符串可能会在那里停留一段时间,但不能保证,如果该内存段被其他东西使用,你将失去你的字符串。