【发布时间】:2009-06-04 20:16:50
【问题描述】:
字符优先[10];
字符秒[10];
什么是 fscanf(fr,"%s %s\n",first,second);第一个字符串太长时怎么办?
我可以只使用 char *first 而不使用 malloc 吗?并且指针会显示到字符串?
【问题讨论】:
标签: c
字符优先[10];
字符秒[10];
什么是 fscanf(fr,"%s %s\n",first,second);第一个字符串太长时怎么办?
我可以只使用 char *first 而不使用 malloc 吗?并且指针会显示到字符串?
【问题讨论】:
标签: c
您可以使用宽度(即“%9s”)来限制字符串的大小。例如,请参阅Microsoft's documentation。
使用指针而不将其初始化为任何东西是使程序崩溃或表现不佳的可靠方法。
【讨论】:
如果您使用的是 glibc,则可以一次性解决这两个问题 - 使用 %as 格式说明符。
它会自动分配足够大的字符串来容纳内容。
像这样:
char *first, *second;
scanf(fp, "%as %as\n", first, second);
注意:这是 GNU 扩展!
【讨论】:
当第一个字符串太长时,你会遇到buffer overflow.的问题
至于你问题的第二部分,如果你不使用 malloc,那么它将指向垃圾内存。字符串可能会在那里停留一段时间,但不能保证,如果该内存段被其他东西使用,您将丢失您的字符串。
【讨论】: