2

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

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

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

4

2 回答 2

5

首先,您不能将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 中,字符串只是愚蠢的字符数组,不要指望像高级语言那样有任何花哨的商品。

于 2012-08-26T15:34:42.277 回答
1

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;
}
于 2012-08-26T15:55:53.517 回答