|  | 
 
| 
本帖最后由 挥世及至吾 于 2018-8-6 21:27 编辑
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  
 带你学c带你飞的S1E19,动动手0,代码如下
 
 复制代码#include <stdio.h>
int main()
{
        signed char str1[256],str2[256],i,res,num; //num为整型
        printf("请输入第一个字符串:");
        scanf("%s",str1);
        printf("请输入第二个字符串:");
        scanf("%s",str2);
        printf("str2 == %d\n",str2[0]); //这边输出为ASCII码
        printf("请输入比较的字符数:");
        scanf("%d",&num);
        printf("str2 == %d\n",str2[0]); //这边输出为0
        for (i = res = 0;i < num;i++)
        {
                if (str1[i] != str2[i])
                {
                        res = str1[i]-str2[i];
                        break;
                }
        }
        printf("比较的结果是:%d\n",res);
        return 0;
}
然后改为用int定义num又正常了,然后我-->
  ,到底为什么呢,我也没看到scanf函数有什么相关规定啊 有没有大帅哥大美女求解释啊啊啊啊啊
   
    
楼主,实际测试了下,改成%c是没有问题的。 
不知道楼主有没有按我的回答实际测试过?   
我大概明白你的意思了,我觉得这个问题应该和堆栈有关啦。 
当你以%d读取输入,整数一般会占用4个字节,按照小端存储以及数组存放第一个值的地址的原理,恰好把str[256]的值覆盖掉。 
可以尝试输出一下地址,应该就可以找到问题所在了。 | 
 |