You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言代码中第二次printf无输出的原因咨询

问题分析与修复方案

你的代码存在两个关键问题,直接导致了不符合预期的输出:


1. strcmp 判断逻辑完全颠倒

strcmp 函数的返回规则是:

  • 两个字符串相等时,返回 0
  • 两个字符串不等时,返回非0值

你当前的判断条件 if(strcmp(s1,s2)) 相当于“当字符串不等时执行分支”,但实际上 s1 和 s2 初始内容完全相同,所以会进入 else 分支,输出错误的sirurile sunt diferite。


2. 向字符串常量写入触发未定义行为

char *s1="abcd"; 中,s1 指向的是存储在只读数据段的字符串常量,这块内存不允许被修改。而你执行 strcpy(s1,s2); 时,试图把 s2 的内容复制到 s1 指向的只读区域,这属于非法操作,会触发未定义行为——程序可能直接崩溃、跳过后续代码,这就是第二个 printf 没有执行的原因。


修复后的代码

#include <stdio.h>
#include<string.h>
int main(void){
    // 将s1改为可写的字符数组
    char s1[30] = "abcd";
    char s2[30] = "abcd";
    // 修正strcmp的判断逻辑
    if(!strcmp(s1,s2)){
        printf("sirurile sunt identice\n");
    }else{
        printf("sirurile sunt diferite\n");
    }
    strcpy(s2,s1);
    printf("%s\n",s1);
    strcpy(s1,s2);
    printf("%s\n",s2);
    return 0; 
}

修复说明:

  • 把 char *s1="abcd"; 改为 char s1[30] = "abcd";,让 s1 指向栈上的可写内存区域,strcpy 操作合法。
  • 用 !strcmp(s1,s2) 反转判断逻辑,确保字符串相等时执行正确分支。

内容的提问来源于stack exchange,提问作者Haxel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 15:07:04