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

C语言提取姓名数组的姓氏存入二维字符数组失败怎么解决

问题排查与修复方案

错误点梳理

  • 变量名笔误:全局姓名数组定义时命名为ame,后续strrchr调用时用了name[i],标识符不匹配,会触发编译报错
  • 数组越界风险:原姓名数组仅初始化了3个元素,循环条件写为i<4会访问未初始化的内存,存在运行异常风险,需改为i<3
  • 字符数组赋值逻辑错误:surname是预先分配了内存的二维字符数组,C语言不支持直接用=给数组赋值指针地址,需要调用strcpy函数将last+1指向的姓氏字符串拷贝到surname[i]对应的内存空间中

修复后可运行代码

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

// 修正数组命名为name
char name[100][100] = {"Charles Thompson","Andy Hardy","Christopher de Charls-morson"};
char surname[100][100];

int main(void) {
   // 修正循环边界为3
   for(int i=0;i<3;i++){
       char *last = strrchr(name[i], ' ');
       if (last != NULL) {
           printf("Last token: '%s'\n", last+1);
           // 用strcpy完成字符串拷贝
           strcpy(surname[i], last+1);
       }
  }
  // 测试输出
  for(int k=0;k<3;k++){
      printf("%s\n", surname[k]);
  }
  return 0;
}

效果说明

代码运行后surname数组的存储内容完全符合需求:surname[0]存Thompson、surname[1]存Hardy、surname[2]存Charls-morson,后续做姓氏匹配查找时可以直接用strcmp函数对比输入字符串和surname数组的元素即可。

内容的提问来源于stack exchange,提问作者D. K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:45:05