鱼C论坛

 找回密码
 立即注册
查看: 2136|回复: 3

[已解决]一个关于C语言程序的疑问

[复制链接]
发表于 2021-3-7 12:29:28 | 显示全部楼层 |阅读模式
10鱼币
下面这段C语言代码是仿写strcmp函数,我在strcmp中写了输出语句,但是执行之后没有任何输出结果。
debug的时候也直接跳过调用函数的那一行,看起来就像程序忽略了那一行一样
如果我把调用函数的那一行赋值给一个变量,程序就能正常执行。
我目前猜想是C语言在自定义函数中使用printf函数可能会出问题,但是不太了解,请C语言大佬给我解答一下。
  1. //使用 fgets 函数接收用户输入的两个字符串(仅支持英文)到 str1 和 str2 中,对比 str1 和 str2,如果两个字符串完全一致,打印“完全一致”;
  2. //如果存在不同,打印第一处不同的位置(索引下标)
  3. #include <stdio.h>
  4. #define MAX 256
  5. int strcmp(char *str1, char *str2) {
  6.         int count = 0;
  7.         while (*str1==*str2 && *(str1+1)!='\0' && *(str2+1)!='\0') {
  8.                 str1++;
  9.                 str2++;
  10.                 count++;
  11.         }
  12.         if(*(str1+1)=='\0' && *(str2+1)=='\0') {
  13.                 printf("两个字符串完全一致");
  14.         } else {
  15.                 printf("两个字符串不完全相同,第%d个字符出现不同",count+1);
  16.         }
  17.         return count;
  18. }
  19. int main() {
  20.         char str1[MAX] = {'\0'}, str2[MAX] = {'\0'};
  21.         printf("请输入第一个字符串:");
  22.         fgets(str1, MAX, stdin);
  23.         printf("请输入第二个字符串:");
  24.         fgets(str2, MAX, stdin);
  25.         //int a = strcmp(str1,str2);//使用这一行之后程序正常执行
  26.         strcmp(str1,str2);//使用这一行,程序无任何输出
  27.         return 0;
  28. }
复制代码
最佳答案
2021-3-7 12:29:29
和库函数的名字冲突了,库函数中也有一个strcmp

  1. //使用 fgets 函数接收用户输入的两个字符串(仅支持英文)到 str1 和 str2 中,对比 str1 和 str2,如果两个字符串完全一致,打印“完全一致”;
  2. //如果存在不同,打印第一处不同的位置(索引下标)
  3. #include <stdio.h>
  4. #define MAX 256
  5. int my_strcmp(char *str1, char *str2) {
  6.     int count = 0;
  7.     while (*str1==*str2 && *(str1+1)!='\0' && *(str2+1)!='\0') {
  8.         str1++;
  9.         str2++;
  10.         count++;
  11.     }
  12.     if(*(str1+1)=='\0' && *(str2+1)=='\0') {
  13.         printf("两个字符串完全一致");
  14.     } else {
  15.         printf("两个字符串不完全相同,第%d个字符出现不同",count+1);
  16.     }
  17.     return count;
  18. }
  19. int main() {
  20.     char str1[MAX] = {'\0'}, str2[MAX] = {'\0'};
  21.     printf("请输入第一个字符串:");
  22.     fgets(str1, MAX, stdin);
  23.     printf("请输入第二个字符串:");
  24.     fgets(str2, MAX, stdin);
  25.     //int a = strcmp(str1,str2);//使用这一行之后程序正常执行
  26.     my_strcmp(str1,str2);//使用这一行,程序无任何输出
  27.     return 0;
  28. }
复制代码

最佳答案

查看完整内容

和库函数的名字冲突了,库函数中也有一个strcmp
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-7 12:29:29 | 显示全部楼层    本楼为最佳答案   
和库函数的名字冲突了,库函数中也有一个strcmp

  1. //使用 fgets 函数接收用户输入的两个字符串(仅支持英文)到 str1 和 str2 中,对比 str1 和 str2,如果两个字符串完全一致,打印“完全一致”;
  2. //如果存在不同,打印第一处不同的位置(索引下标)
  3. #include <stdio.h>
  4. #define MAX 256
  5. int my_strcmp(char *str1, char *str2) {
  6.     int count = 0;
  7.     while (*str1==*str2 && *(str1+1)!='\0' && *(str2+1)!='\0') {
  8.         str1++;
  9.         str2++;
  10.         count++;
  11.     }
  12.     if(*(str1+1)=='\0' && *(str2+1)=='\0') {
  13.         printf("两个字符串完全一致");
  14.     } else {
  15.         printf("两个字符串不完全相同,第%d个字符出现不同",count+1);
  16.     }
  17.     return count;
  18. }
  19. int main() {
  20.     char str1[MAX] = {'\0'}, str2[MAX] = {'\0'};
  21.     printf("请输入第一个字符串:");
  22.     fgets(str1, MAX, stdin);
  23.     printf("请输入第二个字符串:");
  24.     fgets(str2, MAX, stdin);
  25.     //int a = strcmp(str1,str2);//使用这一行之后程序正常执行
  26.     my_strcmp(str1,str2);//使用这一行,程序无任何输出
  27.     return 0;
  28. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-3-7 13:22:27 | 显示全部楼层
人造人 发表于 2021-3-7 12:29
和库函数的名字冲突了,库函数中也有一个strcmp


我还有一些疑问:我没有导入strcmp头文件为什么会发生冲突,还有我采用赋值的方法为什么就可以运行了?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-7 13:36:54 | 显示全部楼层
King丨小义 发表于 2021-3-7 13:22
我还有一些疑问:我没有导入strcmp头文件为什么会发生冲突,还有我采用赋值的方法为什么就可以运行了?

真的,这个问题我大概是解释不了,我说说我的猜想吧
我用clang编译,就是名字冲突也可以正确运行
用gcc就不行,如果不同的编译器的处理方法不一样的话,我猜名字冲突这个问题标准没有定义,这样就把问题的解决方案抛给了编译器的设计者,不同的设计者很有可能就会给出不同的解决方案,就像 i++, ++i 问题一样,不同的编译器会给出不同的结果
^_^
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-7 03:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表