我怀疑将数组作为函数的参数传递,我的代码如下,
#include <stdio.h>
#include <string.h>
void str_cpy(char a[], char b[])
{
a = b;
printf("%s\n", a);
}
int main()
{
char a[] = "hello";
char b[] = "world";
str_cpy(a, b);
printf ("%s\n", a);
return 0;
}
在上面的代码我传递数组到函数是通过引用传递所以它应该在main函数中打印“world”因为我在函数定义中将a的值赋值给a a = b但是它不是,所以请帮帮我..
答案 0 :(得分:2)
将数组传递给函数时。它衰减为指向数组第一个元素的指针。
您的函数str_cpy()
仅将传递的指针a
指向另一个指针b
。它不会修改原始字符数组a
的内容。请注意,指针a
和b
是函数的本地。
另外,请注意关于数组的基本规则是:
&#34;数组不可分配,您必须复制数组中的每个元素。&#34;
您拥有的代码是equivalent to:
char a[] = "hello";
char b[] = "world";
char *ptr1 = a;
char *ptr2 = b;
ptr1 = ptr2;
printf("[%s]",a);
它不会更改原始数组的内容,它只是将指向数组的指针指向另一个数组。
将一个数组的每个元素复制到另一个数组是 strcpy() 提供的功能。您应该只使用标准库提供的功能。
答案 1 :(得分:1)
您的str_cpy()
功能可写为:
void str_cpy(char *a, char *b)
{
a = b;
printf("%s\n", a);
}
这在语义上等同于你所写的;你写的东西和我写的东西之间没有操作上的区别。数组作为指向数组的第一个元素的指针传递。它们是方便的初始化本地指针变量。在函数范围内,您将a
指向b
所在的相同位置,但这不会影响main()
程序中的数组。
要在C中复制数组,您必须依次复制每个元素:
void str_cpy(char *a, char *b)
{
while ((*a++ = *b++) != '\0')
;
printf("%s\n", a);
}
答案 2 :(得分:0)
您将其解释为错误,实际上是pass by value
。
void str_cpy(char a[], char b[]) // it's same as str_cpy(char *a,char *b)
{
a = b;
printf("%s\n", a); // here it will print "world" because it's a local
// change in a but actually in main a still contains "hello"
}
由于您使用的是<string.h>
,因此您可以直接使用strcpy(a,b);
或者,尝试使用char将char复制到目标数组中。
str_cpy(char *a,char *b)
{
while(*b != '\0')
{
*a=*b;
a++;
b++;
}
}
但如果数组a
没有足够的空间来保存复制的字符,则可能会出现问题。