You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C程序问题:拼接姓名数组异常,输出空姓名及长度0

解决C程序全名输出为空且长度为0的问题

别担心,这种问题在C语言字符串处理里很常见,既然你已经怀疑是display_name函数的问题,咱们可以先从几个高频出错点排查,同时也建议你把你的display_name函数代码贴出来,这样能更精准定位问题!

先给你几个常见的排查方向:

  • 参数传递问题:如果传递给display_name的是未初始化的字符串,或者是局部变量的地址(函数返回后内存被释放),就会导致输出空内容。比如主函数里的名/姓数组没正确接收输入,或者传递的指针指向无效内存。
  • 字符串拼接的内存问题:使用strcat拼接时,目标字符串必须有足够的存储空间,而且要确保初始状态是以'\0'结尾的空字符串。如果目标数组没初始化,strcat找不到拼接的起始位置,就会出现异常输出。
  • 输入处理失误:如果用scanf读取名和姓时,没处理好输入缓冲区的换行符或空格,可能导致实际上没读到有效内容,自然输出空全名和0长度。

这里给你一个可以正常运行的示例代码,你可以对比自己的代码找差异:

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

void display_name(char *first_name, char *last_name) {
    // 分配足够空间存储全名(名+空格+姓+结束符)
    char full_name[100];
    // 先初始化空字符串,确保strcat能正确找到起始点
    full_name[0] = '\0';
    
    strcat(full_name, first_name);
    strcat(full_name, " ");
    strcat(full_name, last_name);
    
    printf("拼接后的全名:%s\n", full_name);
    printf("全名长度:%zu\n", strlen(full_name));
}

int main() {
    char first[50], last[50];
    
    printf("请输入你的名:");
    scanf("%s", first);
    printf("请输入你的姓:");
    scanf("%s", last);
    
    display_name(first, last);
    return 0;
}

如果你的代码在动态内存分配、指针使用或者字符串操作上和示例有区别,大概率就是问题所在。可以把你的代码片段贴出来,我帮你仔细分析!

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

火山引擎 最新活动