我已经从GPS接收器解析了一些日期和时间。并且需要将它们从字符串转换为int
:
char year[4] = "2014";
char month[2] = "01";
char day[2] = "24";
char hour[2] ="12";
char minute[2] = "58";
char second[2] = "39";
GPS_current_year = atoi(year);
GPS_current_month = atoi(month);
GPS_current_day = atoi(day);
GPS_current_hour = atoi(hour);
GPS_current_minute = atoi(minute);
GPS_current_second = atoi(second);
执行这些后,结果为:
转换小时字符串时,转换分钟字符串的一部分。与分钟和秒相同。
字符串并排放置在内存中。
如果我更改定义字符串的顺序,则可以将秒添加到年等等。
问题:
atoi
?我知道我可以一次使用循环char
进行转换。只是试图找出它为什么不起作用。
答案 0 :(得分:3)
除了字符串周围缺少引号外,您的char数组的大小应该被定义为在EOS中保留一个char(字符串的结尾为二进制零)。
由于存储器表示将是例如“2014 \ 0”
char year[4+1] = "2014";
答案 1 :(得分:3)
建议不要将字符串大小定义为4 或 5 让编译器确定字符串大小。
char year[] = "2014";
在这种情况下,编译器将使用year
,'2'
,'0'
,'1'
,{{1}初始化大小为5的'4'
}}
OP将大小定义为4导致4-char数组的大小没有终止'\0'
,这不是字符串,会导致'\0'
出现问题。
答案 2 :(得分:0)
你忘记了字符串中的引号:
char year[4] = "2014";
答案 3 :(得分:0)
atoi()
将字符串转换为整数。但是您为字符串变量提供了非字符串值。将您的代码更改为
char year[5] = "2014";
char month[3] = "01";
char day[3] = "24";
char hour[3] ="12";
char minute[3] = "58";
char second[3] = "39";