Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C语言中对字符串使用scanf和printf_C_C++11 - Fatal编程技术网

如何在C语言中对字符串使用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; } #包括 使用名

我不想声明字符数组。我要声明字符串。并使用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;
}
#包括
使用名称空间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有什么意义,所以我省略了那个细节。谢谢,我将编辑以匹配您的评论