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

C语言如何将字符串添加到字符串数组?赋值报错该如何解决?

C语言二维字符数组存储strtok切分结果问题修复

错误原因

  • C语言中char arr[100][100]这类静态二维字符数组的行地址arr[i]是常量指针,属于不可修改的左值,无法直接用=赋值指针地址,因此arr[0] = token会抛出expression must be a modifiable lvalue错误。
  • arr[0][0]是单个char类型变量,只能存储单个字符,和字符串指针类型不匹配,因此仅适用于char类型赋值场景。

修正方案

使用字符串拷贝函数strcpy,把token指向的字符串内容复制到arr对应的行内存空间中即可。同时注意你当前循环里每次都写arr[0]会持续覆盖第一个元素,需使用循环变量i作为数组索引存储所有切分结果。另外要注意strtok的输入参数StringToBeSplit必须是可修改的字符数组,不能是只读字符串常量,否则会触发运行时错误。

修正后的完整代码如下:

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

int main() {
    // 待切分字符串必须定义为可修改的字符数组,不可使用char *StringToBeSplit = "xxx"的写法
    char StringToBeSplit[100] = "sample string to be split";
    char arr[100][100] = {};
    char *token = strtok(StringToBeSplit, " ");
    int i = 0;

    // 增加i < 100的边界判断,防止数组越界
    while(token != NULL && i < 100) {
        strcpy(arr[i], token);
        printf("arr[%d] = %s\n", i, arr[i]);
        token = strtok(NULL, " ");
        i++;
    }
    return 0;
}

补充注意:如果无法确定token的长度,可使用strncpy(arr[i], token, 99),并手动在末尾补\0,避免缓冲区溢出风险。
如果你的需求确实是仅将第一个token存入arr[0],在第一次完成strcpy后添加break跳出循环即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:36:07