Cs的Sscanf问题

时间:2017-01-18 23:16:17

标签: c printf scanf

您好sscanf我遇到了问题。我只是想写一个简单的测试程序来帮助我理解它是如何工作的。使用sscanf写入不同变量时会出现问题。以下是他们的价值观:

IP = 175.85.10.147

数= 2589

email = 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变量只包含奇怪的字符。

1 个答案:

答案 0 :(得分:3)

您需要一些内存来存储号码

即。变化

int *number;

int number;

然后使用

 sscanf(toSend,"%[^:]:%i:%[^:]",IP, &number, email);

我也纠正了错别字 - 这是代码http://ideone.com/hpqGDZ

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
int main(){
  char *toSend = "175.85.10.147:2589:edward@gmail.com";
  int number;
  char IP[200];
  char email[300];
  if (sscanf(toSend, "%199[^:]:%i:%299[^:]", IP, &number, email) != 3) {
     return 1;
  }
  printf("%s\n", IP);
  printf("%i\n", number);
  printf("%s\n", email);
  return 0; 
}