gcc 4.4.4
我究竟做错了什么?
char x[10];
char y[] = "Hello";
while(y != NULL)
*x++ = *y++;
Run Code Online (Sandbox Code Playgroud)
非常感谢任何建议.
nai*_*ore 29
x++
是简短的形式x = x + 1
.但是,x
这是一个数组,您无法修改数组的地址.您的变量y
也是如此.
您可以声明一个整数i
并递增该i
数组,然后访问数组的第th个索引,而不是尝试递增数组.
char x[10], y[5] = "Hello";
int i = 0;
while (y[i] != 0)
{
x[i] = *y[i];
i++;
}
x[i] = 0;
Run Code Online (Sandbox Code Playgroud)
AnT*_*AnT 23
很可能你成了一个流行的误解"数组是一个指针"的受害者,即当你定义一个数组时你实际得到的是一个普通指针指向某个地方分配的某个内存块.在您的代码中,您尝试增加该指针.
代码不"有效",因为实际上数组不是指针.数组是数组.数组不能递增.在C语言中没有"增加数组"这样的操作.实际上,C中的数组本身是不可修改的左值.C中没有可以修改数组本身的操作(只有单个元素可以修改).
如果你想使用"滑动指针"技术遍历你的数组(你正在尝试这样做),你需要显式创建指针并使它们指向数组的起始元素
char *px = x;
char *py = y;
Run Code Online (Sandbox Code Playgroud)
之后,您可以根据需要增加这些指针.
小智 7
C中的数组确实是指针,但是常量指针,这意味着在声明之后它们的值不能被改变.
int arr[] = {1, 2, 3};
// arr is declared as const pointer.
Run Code Online (Sandbox Code Playgroud)
(arr + 1)
是可能但arr++
不可能,因为arr
它不能存储另一个地址,因为它是常量.
char x[10];
char y[] = "Hello";
char *p_x = &x[0];
char *p_y = &y[0];
while(*p_y != '\0') *p_x++ = *p_y++;
Run Code Online (Sandbox Code Playgroud)
由于您无法修改数组地址(由代码完成x++
和y++
在代码中完成)并且您可以修改指针地址,因此我将数组的地址复制到单独的指针中然后递增它们.
如果你愿意,我相信你可以减少乐谱,但我希望你明白这一点.
归档时间: |
|
查看次数: |
59929 次 |
最近记录: |