gpt4 book ai didi

c - 在 C 中使用 strtok 将日期字符串转换为整数

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

我在使用 strtok() 函数时遇到问题。我将日期输入 01/01/2000;我的预期输出为:1, 1, 2000;但是我只是得到 1, 1, 1。这是为什么?

#include <stdio.h>
#include <stdlib.h>
#include "date.h"
#include <string.h>

struct date{
int day;
int month;
int year;
};

Date *date_create(char *datestr){

printf("inside date_create");
char delim[] = "/";
Date* pointerToDateStructure = malloc(sizeof(Date));
printf("%s",datestr);
char string[10];
*strcpy(string, datestr);
pointerToDateStructure->day = atoi(strtok( string, delim));
pointerToDateStructure->month = atoi(strtok( string, delim));
pointerToDateStructure->year = atoi(strtok( string, delim));
printf("%d", pointerToDateStructure->day);
printf("%d", pointerToDateStructure->month);
printf("%d", pointerToDateStructure->year);

return pointerToDateStructure;
}

最佳答案

首先,您想使用strtol而不是atoi(或sscanf,见下文) . atoi 函数不安全。

其次,strtok需要NULL而不是string:

pointerToDateStructure->day = atoi(strtok( string, delim));
pointerToDateStructure->month = atoi(strtok( NULL, delim)); /* NULL instead of string. */
pointerToDateStructure->year = atoi(strtok( NULL, delim)); /* See above. */

第三,您没有检查 strtok 返回的值。

作为旁注,您确定 sscanf 无法解析您的数据吗?

sscanf(str, "%d/%d/%d", &day, &month, &year)

编辑 abelenky 的解释:

函数 strtok 有状态。它“记住”它之前正在处理的字符串,如果您传递“NULL”,它会继续处理同一个字符串,从之前停止的地方开始。如果每次给它传递一个字符串参数,它每次都从头开始。

关于c - 在 C 中使用 strtok 将日期字符串转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7823271/

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