gpt4 book ai didi

c - 在 c 中使用 char 类型作为日期的问题

转载 作者:太空宇宙 更新时间:2023-11-04 02:11:44 25 4
gpt4 key购买 nike

我是 c 的新手,我遇到了一个奇怪的情况:我正在尝试更新我作为字符串输入的日期,我的代码是

typedef struct Employee
{
char fname[20];
char lname[20];
int eme_id;
int emr_id;
char department[20];
int age;
char join_date[20];
float bsal;
float pol_value;
char pol_start_date[20];
char pol_end_date[20];
float premium;
float pre_payment;
char pre_pay_date[20];
int pre_status;/* 0 then not paid 1 then paid*/
float bonus;
}Employee;


char *update_date(char *dat)
{

char *result = NULL;
printf(dat);
result = strtok( dat, "/" );
int date[3];
int i=0;
while( result != NULL ) {
printf( "result is \"%s\"\n", result );
date[i] = atoi( result );
printf( "%d\n", date[i] );
i++;
result = strtok( NULL, "/" );
}

if(date[1]!=12)
{
date[1]++;
}
else
{
date[1]=1;
date[2]++;
}

char a[20];
char b[20];
char c[20];
char d[20];
sprintf(a, "%d", date[0]);
sprintf(b, "%d", date[1]);
sprintf(c, "%d", date[2]);

strcpy (d,a);
strcat (d,"/");
strcat (d,b);
strcat (d,"/");
strcat (d,c);

printf(d);
return d;
}

这里这个函数工作得很好,但是当我在另一个函数中调用它时,比如

while(fread(&eme,recsize_eme,1,fq)==1)
{

char *hell;
hell = update_date(eme.pre_pay_date);
printf("%s",hell);
}

现在它打印一些任意文本..:/请有人帮助我

最佳答案

在第一个代码中

char d[20];
... ...
return d;

“d[20]”在堆栈上。您正在返回指向堆栈上数据的指针。一旦 update_date() 返回,它的所有局部变量现在都无效。

第二个你在返回之前打印 d[] 的值所以没有问题。

strok() 可能是最好避免的。它会修改您传入的字符串并保持静态状态,这两者都是严重的陷阱并且通常会导致细微的错误。

这里有几个替代实现。(当然,在生产代码中,您应该首先避免编写代码来解析日期/时间。有操作系统和库函数可以执行此操作。有很多微妙之处)。

// Scanf can do parsing for you
int date[3];
int n;
n = sscanf(dat, "%d/%d/%d", &date[0], &date[1], &date[2]);
if (n == 3)
{
// OK, we got 3 integers...
}


// atoi() stops on non-digits, use it instead of strtok
char *result = dat;
int date[3];
int i = 0;
while (i < 3 && result)
{
date[i++] = atoi(result);
result = strchr(result, '/');
if (result)
{
++result; // Skip the '/'
}
}

关于c - 在 c 中使用 char 类型作为日期的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13215896/

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