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




