[英]wrong result when converting multiple strings to integers in c. Atoi does not remove the old conversions
我正在嘗試從作為字符串給我的日期中提取日、月和年。 我在乞討時把它們當作 substring 然后我試圖將它們轉換為 integer 類型。 第一個 integer 成功提取,但第二個和第三個收到錯誤值。 Atoi 保留舊的轉換值和 append 的新值
這是我的代碼:
char day[2], month[2], year[4];
strncpy(day, date, 2);
strncpy(month, &date[3], 2);
strncpy(year, &date[6], 4);
int dayInt = atoi(day);
int monthInt = atoi(month);
int yearInt = atoi(year);
您的字符串中沒有終止 null 字節。
char day[3], month[3], year[5];
strncpy(day, date, 2);
day[2] = '\0';
strncpy(month, &date[3], 2);
month[2] = '\0';
strncpy(year, &date[6], 4);
year[4] = '\0';
int dayInt = atoi(day);
int monthInt = atoi(month);
int yearInt = atoi(year);
但是您可以使用sscanf()
更簡單地完成它。
sscanf(date, "%2d/%2d/%4d", &dayInt, &monthInt, &yearInt);
如有必要,請將格式字符串中的/
替換為您的實際分隔符。
盡管您可以使用atoi
進行轉換,但使用sscanf
會更簡潔。 更好的方法是使用strptime
。
#include <stdio.h>
#include <time.h>
int
main(void)
{
char *date = "20210210";
int day, month, year;
struct tm tm = {0};
char *end = "";
if( sscanf(date, "%4d%2d%2d", &year, &month, &day) == 3 ){
printf("year: %d, month: %d, day: %d\n", year, month, day);
}
end = strptime(date, "%Y%m%d", &tm);
if( end != NULL ){
year = tm.tm_year + 1900; /* tm_year is offset from 1900 */
day = tm.tm_mday;
month = tm.tm_mon + 1; /* tm_mon is 0 to 11 */
printf("year: %d, month: %d, day: %d\n", year, month, day);
}
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.