【发布时间】:2017-06-03 12:36:15
【问题描述】:
您好,我遇到了sscanf 的问题。我只是想写一个简单的测试程序来帮助我理解它是如何工作的。使用sscanf 写入不同的变量时会出现问题。以下是他们的价值观:
IP=175.85.10.147
数字=2589
电子邮件 = edward@gmail.com
#include <stdio.h>
#include <stdlib.h>
int main() {
char *toSend = "175.85.10.147:2589:edward@gmail.com";
int *number;
char IP[200];
char email[300];
sscanf(toSend, "%[^:]: %i%[^:]: ", IP, number, email);
printf("%s", IP);
printf("%i", number);
printf("%s", email);
return 0;
}
它打印的 IP 正确。
数字打印不正确,这可能与我在编译时收到的警告有关:format '%i' expects argument of type 'int' but argument 2 has type 'int *'。
email 变量出于某种原因只包含奇怪的字符。
【问题讨论】:
-
您将指向 int 的指针作为参数传递给在该位置采用 int 的函数。从变量声明中删除
*,使其读取int number;,看看是否有效。 -
好吧,让我们先处理警告。
%i需要int,而你给它的是number,即int*。 -
int *number;-->int number;,sscanf(toSend,"%199[^:]: %i:%299s", IP, &number, email); -
0100的意思是六十四,对吧?如果你不同意使用%d而不是%i -
@Jasen:你是对,
%i会神奇地parse0prefixed numbers as octal。