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

C语言向二维数组写入字符串出现modifiable lvalue错误如何解决?

错误原因

你定义的buffer2是char [5][1000]类型的二维数组,buffer2[write2]对应的是长度为1000的字符数组的首地址,属于不可修改的左值,C语言语法不允许直接对数组名进行赋值操作,所以buffer2[write2] = updatedStr;这种给数组首地址赋值的写法会直接触发编译错误。

修复方案

把报错行替换为字符串拷贝操作即可,同时补充缺失的缓冲区操作逻辑:

pthread_mutex_lock(&mutex2);
// 用strncpy避免缓冲区溢出,最多拷贝999个字符,预留最后一位存储结束符
strncpy(buffer2[write2], updatedStr, 999);
buffer2[write2][999] = '\0';
// 如果你自行实现的str_replace函数是动态申请内存返回的,拷贝完成后要释放对应内存避免泄漏
free(updatedStr);
// 更新write2指针,移动到下一个可写位置
write2 = (write2 + 1) % 5;
// 发送条件信号通知消费buffer2的线程有新数据可用
pthread_cond_signal(&readyBuffer2);
// 操作完buffer2后释放对应的互斥锁
pthread_mutex_unlock(&mutex2);
其他注意点
  • 你当前的pthread_cond_wait没有搭配谓词判断,存在虚假唤醒的风险,建议修改为先判断buffer1是否存在未处理数据,再进入等待逻辑
  • 注意互斥锁的加锁解锁顺序,避免死锁:你现在在持有mutex1的情况下加mutex2的锁,要保证所有线程加锁顺序都遵循先加mutex1再加mutex2的规则
  • 内层循环的buffer1[read1][0] != -1判断逻辑要和写入buffer1的逻辑对应,确保哨兵值的读写规则一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:45:04