【发布时间】:2016-02-06 06:10:59
【问题描述】:
我最近才开始研究一般的 scanf 和 printf,在我的研究和一般情况下,我多次在我的代码中遇到问题,所以我决定制作一个测试程序并成功地复制了错误。
#include <string>
#include <string.h>
#include <stdio.h>
int main(){
std::string name;
std::string name2;
printf("Print donald or larry: ");
scanf("%s",name);
if(strcmp(name.c_str(), "donald") == 1){
printf("You entered donald");
goto stop;
}else{
printf("You entered larry");
goto stop;
}
stop:
return 0;
}
当我尝试编译代码时,它会抛出来自第 10 行的错误
错误:
error: cannot pass objects of non-trivially-copyable type 'std::string {aka
class std::basic_string<char>}' through '...'|
来源:
scanf("%s", name);
name.c_str 和 &name 我都试过了,它们都不起作用,name.c_str 使 if 语句出错并且不起作用,但 &name 完全崩溃了,尽管我发现 &<variable>到目前为止只适用于整数。
我做错了什么?
【问题讨论】:
-
if(strcmp(name.c_str(), "donald") == 1){不。 -
C 或 C++。选择一个,留下另一个。如果你想要 C++,试试
coutandcin。 -
决定你是用 C 还是 C++ 编码。如果是 C,scanf 很酷但忘记
string。如果是 C++,string很好,但没有更多 scanf:std:cin >> name; -
这是 C++,在 C 中编程时使用 scanf 可能更好
-
这篇文章似乎是做作的。