0

我是 c 语言的新学生,我只是想出了这个。我编码:

#include <stdio.h>
#include <string.h>

int main(void)
{
   char str[80];

   printf("Enter sth: ");
   char st1 = gets(str);

   printf("Enter sth: ");
   char st2 = gets(str);

   if(strcpy(st1,st2))
     printf("Same\n");
   else
      printf("Different\n");

  return 0;
}

我的目标是检查我从键盘输入的 2 个字符串是否相同。我编译它并收到一些警告:

hello.c:在函数'main'中:hello.c:9:16:警告:初始化从没有强制转换的指针生成整数[默认启用]

hello.c:12:16: 警告:初始化从没有强制转换的指针生成整数 [默认启用]

hello.c:14:5: 警告:传递 'strcpy' 的参数 1 使指针从整数不进行强制转换 [默认启用]

/usr/include/string.h:128:14:注意:预期的 'char *限制 ' 但参数的类型为 'char'</p>

hello.c:14:5: 警告:传递 'strcpy' 的参数 2 使指针从整数不进行强制转换 [默认启用]

/usr/include/string.h:128:14:注意:预期为 'const char * restrict ' 但参数的类型为 'char'</p>

Enter sth: asd
Enter sth: asd
Output : Segmentation fault (core dumped)

Segmentation Fault 当你想访问它不存在的时候,我看到这是一个错误!

我在 Stackoverflow 中搜索了一些类似的问题,我不明白为什么这段代码不起作用。谢谢!

4

5 回答 5

3

您将char变量的地址视为字符串并使用strcpy而不是strcmp. 这个:

char st1 = gets(str);
char st2 = gets(str);
if(strcpy(st1,st2))

本来是:

char st1[255], st2[255];
scanf("%254s", st1);
scanf("%254s", st2);
if(strcmp(st1, st2) == 0)
于 2013-10-06T16:28:44.323 回答
2
 if(strcpy(st1,st2))
      ^
      |
    strcmp

strcpy用于字符串复制,而不用于字符串比较。
删除分段错误 更改char str1char *strchar str2char *str2

#include <stdio.h>
#include <string.h>

int main(void)
{
    char str1[80];
    char str2[80];

    printf("Enter sth: ");
    char *st1 = gets(str1);

    printf("Enter sth: ");
    char *st2 = gets(str2);

    if(!strcmp(st1,st2))
        printf("Same\n");
    else
        printf("Different\n");

    return 0;
} 
于 2013-10-06T16:28:30.440 回答
1

您会收到编译警告,因为gets()返回char *,但您声明str1str2as char

你得到分段错误,因为它应该是:

if(strcpy(st1,st2))

应该与 一起使用strcmp,我想这是一个错字,因为strcmp在你的问题标签中:)

注意:千万不要gets(),可以用fgets()代替。

char *st1 = fgets(str, 80, stdin);
于 2013-10-06T16:28:32.947 回答
0

您正在尝试使用strcmp,但您正在使用strcpy.

此代码可能会对您有所帮助。

#include <stdio.h>
#include <string.h>

int main(void)
{
   char str1[80];
   char str2[80];

   printf("Enter sth: ");
   gets(str1);

   printf("Enter sth: ");
   gets(str2);

   if(!strcmp(str1,str2))
     printf("Same\n");
   else
      printf("Different\n");

  return 0;
}
于 2013-10-06T16:32:19.760 回答
0

以下是修复代码的方法:

#include <stdio.h>
#include <string.h>

int main(void)
{
   char str[80];
   char str2[80];

   printf("Enter sth: ");
   //notice that gets is not safe,
   //if the line is too long (>79 char), you'll have a buffer overflow
   gets(str);

   printf("Enter sth: ");
   gets(str2);

   //strcmp instead of strcpy
   if(strcmp(str,str2) == 0)
     printf("Same\n");
   else
      printf("Different\n");

  return 0;
}
于 2013-10-06T16:33:34.787 回答