我已经编写了这段代码,但它没有用,但当我用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);
}
}
答案 0 :(得分:0)
如果你定义一个这样的字符串:
char *targ = "abcd";
它被视为只读值,因为字符串"abcd"
存储在只读存储器中,而指针targ
存储在堆栈中。根据您的编译器,您可能会收到一些警告,除非您使用const char *targ = "abcd";
更明确地说明这一点。在这种情况下,不允许使用targ[i] = src[i];
之类的作业。
如果你定义一个这样的字符串:
char targ[] = "abcd";
将在您的数据堆栈上创建一个char数组,可以更改此字符串,因为堆栈上的数据是可读写的。另外,您可以将数组的第一个元素作为指针访问。