gpt4 book ai didi

c - 打印字符数组时出现意外行为

转载 作者:行者123 更新时间:2023-11-30 14:56:53 26 4
gpt4 key购买 nike

我目前正在尝试通过在特定点打印某些变量的值来通过 UART 调试我的程序。我的问题是打印两个字符数组。我打印它们的顺序似乎会影响它是否打印。数组的声明位于头文件的结构中,如下所示 -

//header file
typedef struct
{
char latitude[10];
char longitude[11];
}NMEA_RMC_t;

NMEA_RMC_t rmc;

解析输入数据后,在另一个函数中对字符数组进行操作。尽管程序中的其他地方存在中断,但它们不会通过中断进行更新。在主代码中,如果我按如下方式打印它们-

//main program loop
printf("lat: %s \t long: %s \n", rmc.latitude, rmc.longitude);

终端的输出是这样的-

lat: +50.71735 long:

而如果我像这样以不同的顺序打印它们-

printf("long: %s \t lat: %s \n", rmc.longitude, rmc.latitude);

我得到这个输出。

long: -001.39118 lat:

此外,如果我将打印分成两个单独的 printf 语句,则只有第一个 print 语句正确打印 char 数组。我以前不需要在这里寻求帮助,但这已经让我困了一周了。任何帮助将不胜感激!干杯。

edit

程序中写入数组的部分是这样的。纬度和经度数组本质上是相同的。

/* now we are in first char of latitude */

/* copy latitude chars */
strlcpy ((char*)lat, (const char*)ptr_to_comma, 10 );/*copies most size-1, null terminated*/ //changed 11 to 10

/* default latitude presentation is ddmm.mmmmm
we need to change it to dd.mmmmmmm
*/
unsigned char ind;
for (ind=0; ind<9; ind++)
{
if (*ptr_to_comma == '.')
{
ptr_to_comma++;//step over '.'
}
if ( ind==2 )
{
lat[ind++]='.';
}
lat[ind] = *ptr_to_comma;
ptr_to_comma++;
}
lat[10] = '\0'; //terminate
/* now lat == dd.mmmmmmm */

ptr_to_comma++; /*step over comma to the NS-indicator*/

/*catch NorthSouth-indicator and step*/
if ( *ptr_to_comma == 'N'){ /*if we are in the North*/
sign = '+';
rmc.ns_indicator = 'N';
} else if ( *ptr_to_comma == 'S'){ /*else we are in the South*/
sign = '-';
rmc.ns_indicator = 'S';
}
ptr_to_comma++;//step over NS-indicator
ptr_to_comma++;//step over comma to the longitude field

/* dd.mmmmmmm to dd.ddddddd */

_convert_minutes( (unsigned char*) lat+3 );

/* copy latitude with sign to the rmc-struct */
rmc.latitude[0] = sign;
strcpy ( (char*)rmc.latitude+1, (const char*)lat);
rmc.latitude[10]='\0';

本质上,它是从传入的数据流中解析信息。

最佳答案

要使 %s 正常工作,char 数组必须有一个 NUL 终止符 \0,表示字符串的结束。

如果您不为此留出空间,则程序的行为将未定义

您需要自己初始化数组 - 不要依赖编译器来完成此操作。

取出调试器并在 printf 处检查与 rmc 关联的内存。

关于c - 打印字符数组时出现意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44348359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com