【发布时间】:2021-04-14 23:55:49
【问题描述】:
我对 C++ 编码很陌生,我现在面临一个问题。我需要编写一个以 DD.MM.YYYY 格式接收生日(字符串)作为参数的函数。然后我需要提取日期、月份和年份,并使用 atoi() 函数将它们保存在一个 int 数组中。 我的代码中的问题是,当我使用 atoi 获取日期和月份时,我得到了 0 作为值,但是在尝试将年份作为 int 值时,我得到了正确的值。谁能告诉我我做错了什么?
谢谢
#include <iostream>
#include <cstdlib>
using std::cout, std::cin, std::string;
int * extractDate(string birthday) //Birthday format: DD.MM.YYYY
{
// Extraction of DD
char dayArr[2] = {birthday[0], birthday[1]};
dayArr[2] = '\0';
// Extraction of MM
char monthArr[2] = {birthday[3], birthday[4]};
monthArr[2] = '\0';
// Extraction of YYYY
char yearArr[4] = {birthday[6], birthday[7], birthday[8], birthday[9]};
yearArr[4] = '\0';
// Int-Array to save the data as numbers
int * birthdayArr = new int[3];
// Converting and saving the data to integers
birthdayArr[0] = atoi(dayArr); // Here I get 0
birthdayArr[1] = atoi(monthArr); // Here I get 0 as well
birthdayArr[2] = atoi(yearArr); // Here I get the year correctly
birthdayArr[3] = '\0';
return birthdayArr;
}
【问题讨论】:
-
没有
dayArr[2]。该数组只有 2 个元素,dayArr[0]和dayArr[1]。 -
dayArr有两个元素,dayArr[0]和dayArr[1]。但是dayArr[2]已经结束了,分配给它会导致未定义的行为。 -
为什么必须使用
atoi()而不是采用std::string的 C++ 函数? -
是的,您确实需要自己终止阵列。但是您还需要声明足够大的数组以容纳终止符。
-
他们教得很好,不用担心 -- 如果这是他们如何教授 C++ 的一个例子,那就有担心了。