2017-08-14 16 views
0

我有这个项目的问题,我尝试搜索论坛上的答案,但我什么也没找到。Sscanf由命令行采取的字符串

struct orario { 
int hours; 
int minutes; 
int seconds; 
char *format; 
}orario1; 

int main(int argc, char *argv[]) { 
sscanf(argv[1],"%d:%d:%d %s",&orario1.hours,&orario1.minutes,&orario1.seconds,orario1.format); 

printf("%d:%d:%d %s",orario1.hours,orario1.minutes,orario1.seconds,orario1.format); 

的输出是数字部分,但字符串(例如AM或PM)正确是出乎意料的(空)。

我无法识别我的错误,有人可以找到并告诉我?!

谢谢。

+0

在使用'argv [1]'之前,你应该确实检查用户是否提供了一个(或多个)参数。如果没有提供参数,那么'argv [1]'将是一个空指针,'argv [2 ]'而且会超出界限。这个检查是通过测试'argc> = 2'完成的。 –

+0

是的,我知道,我会做。 – Fabio

回答

1

您的代码有未定义的行为,因为format是一个未初始化的指针。

使用

char format[8]; 

%7s。在依赖具有值的变量之前检查返回值。

+0

我按照你的说法试过,但结果是: 输入:./project 21:3:2 AM 输出:21:3:2 – Fabio