我需要帮助:
int t;
t = 1;
char abc[256];
int main() {
scanf("%s", abc);
if(abc == "google") {
printf("%s \n", abc);
system("firefox");
} else
printf("error");
}
总是返回错误请有人帮忙!
我已经尝试scanf("%c", &abc);
并且我用相同的结果重写了大约5次。
我对此很陌生,所以这可能是一个非常愚蠢的事情。
答案 0 :(得分:4)
if(abc == "google") {
这不符合你的想法。这将检查这两个字符串的指针在数值上是否相等。它们永远不会,因为abc
在堆栈中分配,"google"
是字符串文字,因此具有静态存储持续时间。
你应该像ameyCU指出的那样使用strcmp
。
一般情况下,不要像这样使用scanf
,如果有人传递大字符串,你编写的代码很容易受到缓冲区溢出攻击。
您可能希望查看有关如何安全使用scanf
的好文章。 How to prevent scanf causing a buffer overflow in C?
答案 1 :(得分:3)
答案 2 :(得分:1)
常量字符串“google”驻留在程序的.rodata部分中,如果您使用所有警告进行编译,则会收到此警告
google.c:10:12: warning: comparison with string literal results in unspecified behavior [-Waddress]
if(abc == "google") {
此代码与
等效const char* const google_str = "google";
if(abc == google_str)
此处字符串“google”和该字符串的地址都是常量。所以你看到你正在进行指针比较,而不是字符串比较。
printf("%p == %p\n", abc, google_str);
此代码将向您显示abc驻留在堆栈上,而google_str位于.rodata部分。字符串比较应该用
完成if(0 == strcmp(abc, "google")) {
答案 3 :(得分:0)
<code> int strcmp(const char *str1, const char *str2) <code>
可用于面向对象的语言,如java和dot net 在c cpp中你必须使用String的inbuild库函数,如strcpy,strcmp
#include <stdio.h>
int t;
t = 1;
char abc[256],a[256];
int main()
{
strcpy(a,"google");
scanf("%s", abc);
if( strcmp("abc","google")==0 ) {
printf("%s \n", abc);
printf("firefox");
} else
printf("error");
return 0;
}
将str1指向的字符串与str2指向的字符串进行比较。
因此,您将修改代码
{{1}}