scanf对于string的坑点

108 阅读1分钟

定义 string str;
并使用scanf("%s", &str[0])进行读入

	scanf("%s", &str[0]);
	printf("%s", &str[0]);    //正常输出
	cout<<str;//输出为空,但是如果使用cin读入str会正常输出

用类似gets()读入也会造成这样的情况

我猜想,这些函数原本只是适用于字符数组,其大小是已经确定了的,读入不会改变数组的大小(废话,确定了怎么改变),但是string的默认大小是0,使用类似胡scanf对数组进行读入的操作并不改变其大小,cout根据大小进行输出(导致什么也没输出),printf根据是否读入‘\0’来终止输出,然后就造成了这样的情况。

解决方案,先确定一下string大小

	str.resize(10010);

就ok了,说实话应该上面的操作会造成数组越界。