使用GNU cc 4.8.1编译Atmega64。我的字符串文字正在消失。我尝试将帧从Atmega64 UARt中推出,并且除了来自全局阵列的有效载荷(中间10个字节)之外,所有帧都将其移出。如果我写入全局数组
array[0] = 'H';
array[1] = 'e';
array[2] = 'l';
array[3] = 'l';
array[4] = 'o';
这使它脱离了UART。但是,如果我使用字符串文字char *array = "Hello";
,然后将此指针传递给memcpy(),则该文本永远不会移出UART,尽管框架的页眉/页脚部分会这样做。我只是在有效载荷/消息应该是垃圾的地方。字符串文字发生了什么,编译器只是因为某种原因将它吹掉了?我在一个函数中填充数组,然后立即调用另一个构建UART帧的函数,将全局数组内容复制到输出数组中。
这是我将字符串文字复制到全局数组中的函数。
char screen[4][11]
display(void)
{
char *strpt;
LCDmemcpy(1, "stuff"); //doesn't work
strpt = "blah";
LCDmemcpy(2, strpt); //doesn't work either
}
void LCDmemcpy(char seg, char *buff)
{
u8 i;
// if(seg<5 && seg>0)
{
//memcpy(&screen[seg-1][0], buff, 11);
for(i=0; i<11; i++)
{
screen[seg-1][i] = buff[i];
}
}
}
答案 0 :(得分:0)
当在函数调用中用作参数时,数组的名称衰减为指向第一个元素的指针。这将允许将文字(衰减为相同类型)分配给它,它不会修改原始数组(因为指针是按值传递的),而是指针参数的值......
此代码说明了您的问题:
#include <stdio.h>
void confusing(char array[])
{
char* literal = "Hallo";
array = literal;
printf("%s - now array points to literal...not...\n", array);
}
int main(void)
{
char myArray[] = "xyz";
confusing(myArray);
printf("%s - as expected, no change here\n", myArray);
return 0;
}
<强>输出:强>
Hallo - now array points to literal...not...
xyz - as expected, no change here