如何在C语言中对字符串使用scanf和printf
我不想声明字符数组。我要声明字符串。并使用scanf和printf获取输入并显示该字符串的输出。我尝试过下面所示的方法,但它不能正常工作。如何以适当的方式做这件事如何在C语言中对字符串使用scanf和printf,c,c++11,C,C++11,我不想声明字符数组。我要声明字符串。并使用scanf和printf获取输入并显示该字符串的输出。我尝试过下面所示的方法,但它不能正常工作。如何以适当的方式做这件事 #include<bits/stdc++.h> using namespace std; int main() { string str; scanf("%s", str.c_str()); printf("%s", str.c_str()); return 0; } #包括 使用名
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str;
scanf("%s", str.c_str());
printf("%s", str.c_str());
return 0;
}
#包括
使用名称空间std;
int main()
{
字符串str;
scanf(“%s”,str.c_str());
printf(“%s”,str.c_str());
返回0;
}
您试图在只读区域中写入,例如str.c_str()。 您要做的是:
std::cin >> str;
或者,如果出于特定原因,您必须使用scanf。从C++17开始,您可以执行以下操作:
str.data()
它返回一个可修改的内存区域
<>编辑:正如@ NWP所说,你必须调用Str.Resize(size),因为字符串的大小是0,在前面的是./P>C或C++。C没有字符串-只有以nul结尾的字符数组。所以必须使用字符数组。是的,但为什么?它不能正常工作。-->你能详细解释一下吗?
str.c_str()
是只读的。并且未分配/为空。。。乌兰巴托。改用std::cin
<代码> STD::String 支持它,你不应该像这样混合C和C++。基本上不可能使scanf
行正确,因为它将任意数量的数据读入缓冲区,因此需要任意大的缓冲区,这意味着在读取时必须使缓冲区变大scanf
不会这样做<代码>std::cin这样做,您可以执行std::cin>>str代码>。你应该试着使用那些你想要的工具,而不是为了不同的目的而使用的工具。可以修改的是,但是大小为0,所以不是很有用。你需要调用str.resize(一些神奇的数字)代码>第一个。@nwp True,我不认为在这里使用scanf有什么意义,所以我省略了那个细节。谢谢,我将编辑以匹配您的评论