【发布时间】:2020-06-01 15:38:37
【问题描述】:
我正在使用sscanf 来读取字符串。字符串被空格分割。 sscanf 不返回第一个字符串。
代码如下:
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char** argv) {
char TransactionID[15], CardID[8];
char Datetime[50];
int Amount;
char * s="aaaabbbbcccc defadbed 2020:04:29:23:07:00 1234";
sscanf(s,"%s %s %s %d", TransactionID, CardID, Datetime, &Amount);
printf("s[0] = %c\n", s[0]);
printf("amount = %d\n", Amount);
printf("TransactionID = %s\n", TransactionID);
printf("CardID = %s\n", CardID);
printf("Datetime = %s\n", Datetime);
return 0;
}
输出是:
s[0] = a
amount = 1234
TransactionID =
CardID = defadbed
Datetime = 2020:04:29:23:07:00
TransactionID 没有返回正确的结果。但是其他的都对。
【问题讨论】:
-
CardID的长度不足以存储 NUL 终止符。因此,您的代码可能只是具有未定义的行为。 -
@underscore_d 也许。
-
我很慷慨。确实如此。
-
也检查来自
sscanf的返回值。if(sscanf(...) != 4) {...} -
@WeatherVane,它返回 4。