我有一个形式为 2d 的字符数组arr[][]
。我需要在该数组的末尾添加一个字符,有时在该数组的第 i 行或第 j 行的开头添加一个字符。这是代码片段:
arr[j] = strcat(arr[j],")");
arr[i] = strcat("(",arr[i]);
当我编译代码时,我收到错误:分配中的类型不兼容。现在我假设arr[j]
并且arr[i]
是字符串。我哪里错了?换句话说,将字符追加或添加到字符串开头的最佳做法是什么?
我有一个形式为 2d 的字符数组arr[][]
。我需要在该数组的末尾添加一个字符,有时在该数组的第 i 行或第 j 行的开头添加一个字符。这是代码片段:
arr[j] = strcat(arr[j],")");
arr[i] = strcat("(",arr[i]);
当我编译代码时,我收到错误:分配中的类型不兼容。现在我假设arr[j]
并且arr[i]
是字符串。我哪里错了?换句话说,将字符追加或添加到字符串开头的最佳做法是什么?
首先,您不能将char *
返回的 by分配strcat
给现有的数组行。
但更重要的是,strcat
不使用连接结果分配新字符串,而是在第一个字符串中就地执行连接。返回值始终是第一个字符串,只是为了方便。所以,在第一种情况下,你只需要这样做:
strcat(arr[j],")");
(假设arr[j]
对于添加的字符足够大)
第二种情况更复杂,因为您必须在)
现有字符串的开头添加 。例如,您可以在单独的缓冲区中执行操作,然后将其复制回arr[j]
using strcpy
,或者将字符串的整个内容向前移动一个字符并手动添加括号:
memmove(arr[j]+1, arr[j], strlen(arr[j]));
arr[j][0]='(';
从您的错误中,我担心您认为这char *
就像其他语言中的字符串类,但可惜不是那样的。请记住,在 C 中,字符串只是愚蠢的字符数组,不要指望像高级语言那样有任何花哨的商品。
PL。看看下面的简单示例是否有帮助,
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char* argv[])
{
char myarray[2][10], *temp;
//Populating something in the array
strcpy(myarray[0], "string1");
strcpy(myarray[1], "string2");
printf("%s\n", myarray[0]);
printf("%s\n", myarray[1]);
//Adding something at the end of the string..
//Be careful to check if the source is large enough.
//Also consider using strncat
strcat(myarray[0], ")");
printf("Appended at the end %s\n", myarray[0]);
//Append at the beginning
//Here you can use a temporary storage.
//And pl. do the required error handling for insufficent space.
temp = malloc(strlen(myarray[1]) + strlen("(") +1);
strcat(temp, "(");
strcat(temp, myarray[1]);
strcpy(myarray[1], temp);
printf("Appended at the beginning %s\n", myarray[1]);
free(temp);
return 0;
}