我正在尝试构建一个程序,用户以此格式'01'14'2013'输入日期,并将其输出为“2013年1月14日”格式。我试图将保存用户输入的字符串复制到另一个字符串,以后将其连接到没有字符串的第一个和第二个索引的原始字符串,以便我只有'/ 14/2013',来自原始字符串,然后用''替换'/',以便它读取月,日和年....但由于某种原因,当我尝试将原始字符串从输入复制到另一个字符串(一个我计划稍后连接),它没有有效复制,我错过了什么......?
#include <stdio.h>
#include <string.h>
int main()
{
char date[100];
char month[100];
char array[12][100] ={"January", "Febuary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
char month2[100];
printf(" Please enter a date ");
fgets( date, 100, stdin);
strcpy(month2, month);
if( date[0] == '0' && date[1] == '1')
{
strcpy(month, array[0]);
}
else if( date[0] =='0' && date[1] == '2')
{
strcpy(month, array[1]);
}
else if( date[0] =='0' && date[1] == '3')
{
strcpy(month, array[2]);
}
else if( date[0] =='0' && date[1] == '4')
{
strcpy(month, array[3]);
}
else if( date[0] =='0' && date[1] == '5')
{
strcpy(month, array[4]);
}
else if( date[0] == '0' && date[1] == '6')
{
strcpy(month, array[5]);
}
else if( date[0] =='0' && date[1] == '7')
{
strcpy(month, array[6]);
}
else if( date[0] =='0' && date[1] == '8')
{
strcpy(month, array[7]);
}
else if( date[0] =='0' && date[1] == '9')
{
strcpy(month, array[8]);
}
else if( date[0] =='1' && date[1] == '0')
{
strcpy(month, array[9]);
}
else if( date[0] =='1' && date[1] == '1')
{
strcpy(month, array[10]);
}
else if( date[0] =='1' && date[1] == '2')
{
strcpy(month, array[11]);
}
printf("%s \n", month);
printf("%s \n", month2);
return 0;
}
答案 0 :(得分:1)
strcpy(month2, month);
month
和month2
都未初始化为此时有用的任何内容。它们的内容是不确定的,并且使用正确终止的C字符串之外的其他内容调用strcpy
会调用未定义的行为。
看起来像是一个错字。
答案 1 :(得分:0)
较少的代码,但没有一些验证。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char date[100];
char month[100];
char array[12][100] = {"January", "Febuary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
printf(" Please enter a date ");
fgets( date, 100, stdin);
char month2[100];
strcpy(month2, date);
month2[2] = '\0';
strcpy(month, array[atoi(month2) - 1]);
printf("%s \n", month);
return 0;
}
答案 2 :(得分:0)
#include <stdio.h>
#include <string.h>
#include <ctype.h>
typedef struct mon {
const char *name;
const int len;
} Month;
#define M(x){ x " ", sizeof(x)}
Month month[] = { {"", 0}, //dummy
M("January"), M("Febuary"), M("March"), M("April"),
M("May"), M("June"), M("July"), M("August"),
M("September"), M("October"), M("November"), M("December")
};
int main(){
char in_date[128];
char out_date[128] = "";
int m = 0, pos;
printf(" Please enter a date E.g MM/DD/YYYY\n");
fgets( in_date, sizeof(in_date), stdin);
if(in_date[0] == '0'){
if(isdigit(in_date[1]) && in_date[1] != '0'){
m = in_date[1] - '0';
pos = month[m].len;
memcpy(out_date, month[m].name, pos);
}
} else if(in_date[0] == '1'){
if('0' <= in_date[1] && in_date[1] <= '2'){
m = 10 + in_date[1] - '0';
pos = month[m].len;
memcpy(out_date, month[m].name, pos);
}
}
if(m){
memcpy(out_date + pos, in_date + 3, 7);
out_date[pos + 2] = ',';
out_date[pos + 7] = '\0';
printf("%s\n", out_date);
} else {
printf("invalid month\n");
}
return 0;
}