我怎样才能理解这段代码(字符串作为c中的函数参数)

时间:2016-12-06 06:06:17

标签: string pointers char

我已经编写了这段代码,但它没有用,但当我用targ []和sour [] 替换 * targ和* sour时,它的工作原理。当我调用函数converge时,它会显示许多错误,如converge(*targ, *sour)。请有人帮我理解这一点。

#include<stdio.h>
#include<string.h>
void converge(char *target, char *src);
int main()
{
    char  *targ = "xxxxxxxxxxxxxxxxxxx";
    char  *sour =   "yyyyyyyyyyyyyyyyyyy";
    converge(targ, sour);
    //printf("%s", targ);
}

void converge(char *target, char *src)
{
    int i, j;
    for(i=0,j=strlen(src); i<=j; i++, j--)
    {
        target[i]= src[i];
        target[j]= src[j];
        printf("%s\n",target);
    }
}

1 个答案:

答案 0 :(得分:0)

如果你定义一个这样的字符串:

char *targ = "abcd";

它被视为只读值,因为字符串"abcd"存储在只读存储器中,而指针targ存储在堆栈中。根据您的编译器,您可能会收到一些警告,除非您使用const char *targ = "abcd";更明确地说明这一点。在这种情况下,不允许使用targ[i] = src[i];之类的作业。

如果你定义一个这样的字符串:

char targ[] = "abcd";

将在您的数据堆栈上创建一个char数组,可以更改此字符串,因为堆栈上的数据是可读写的。另外,您可以将数组的第一个元素作为指针访问。