c - C 中的 strcat 不兼容类型错误

标签 c string strcat incompatibletypeerror

我有一个 arr[][] 形式的二维字符数组。我需要在末尾添加一个字符,有时在该数组的第 i 行或第 j 行的开头添加一个字符。这是代码片段:

 arr[j] = strcat(arr[j],")");
 arr[i] = strcat("(",arr[i]);

当我编译代码时,出现错误:赋值中的类型不兼容。现在我假设 arr[j]arr[i] 是字符串。我哪里错了?换句话说,将字符附加或添加到字符串开头的最佳做法是什么?

最佳答案

首先,您不能将strcat 返回的char * 分配给现有的数组行。

但更重要的是,strcat 不会为连接的结果分配一个新字符串,而是在第一个字符串中就地执行连接。返回值总是第一个字符串,只是为了方便。因此,在第一种情况下,您只需要做:

strcat(arr[j],")");

(假设 arr[j] 对于添加的字符足够大)

第二种情况更复杂,因为您必须将 ) 添加到现有字符串的开头。你可以例如在单独的缓冲区中执行操作,然后使用 strcpy 将其复制回 arr[j],或者将字符串的全部内容向前移动一个字符并手动添加括号:

memmove(arr[j]+1, arr[j], strlen(arr[j]));
arr[j][0]='(';

从你的错误来看,我担心你认为 char * 就像其他语言中的字符串类,但可惜它不是那样的。请记住,在 C 中,字符串只是字符的哑数组,不要指望像在高级语言中那样有任何花哨的商品。

关于c - C 中的 strcat 不兼容类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12131347/

相关文章:

c - GCC -D 相当于 iarbuild.exe

c - 从字符中删除字母并重新打印该字符

c++ - 哪个更好地检查 std::string 中是否存在字符?查找还是 find_first_of?

c - 连接字符串后的 Malloc() 内存损坏错误

c - 如何在 LattePanda 上启用 ACPI(用于关机)

c - 来自两个 3D 点的平面方程以及该平面与点之间的垂直距离

c++ - 为什么 `int ;` 在 C 中编译得很好,但在 C++ 中却不行?

c - 发出写入字符串数组的问题

c++ - 转义字符包含在字符串中

c++ - strcat 查询 (string.h)