【问题标题】:Parsing string to long in C在C中将字符串解析为long
【发布时间】:2011-10-28 13:53:16
【问题描述】:

我用python写了一个服务器,用C写了一个客户端。

python 服务器向 C 客户端发送即“1 1000\n”。

接收此字符串的 C 函数应将其解析为两个长整数。

void receive_job() {
 char tmp_buffer[256];
 long start, stop;
 recv(sock, tmp_buffer, 255, 0);
 /*
 here I wonder how I can parse tmp_buffer to set start and stop values.
 */
}

我对 C 语言不是很精通,所以我希望能对此发表评论。

【问题讨论】:

    标签: c string parsing int


    【解决方案1】:

    查看 strtol() 或 strtoul(),具体取决于您的具体数据类型:

    char end;
    long x = strtol(tmp_buffer,&end,10);
    long y = strtol(end+1,NULL,10);
    

    【讨论】:

      【解决方案2】:

      使用strtol

      char data[] = "1 1000\n";
      char *next, *err;
      long a = strtol(data, &next, 10);
      long b = strtol(next, &err, 10);
      

      【讨论】:

        【解决方案3】:

        查看 sscanf 手册页 - 但检查返回值!

        【讨论】:

          【解决方案4】:

          最好在调用recv 之前使用memset 清除tmp_buffer,或者至少在其中添加一个空字节。否则它将包含垃圾,如果某些内容传输错误,您可能会解析这些垃圾。

          【讨论】:

          • 谢谢,我目前正在使用带有表达式“%ld %ld\n”的 sscanf,所以我认为没有必要清除 tmp_buffer。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-05-29
          • 1970-01-01
          • 2011-07-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-02
          相关资源
          最近更新 更多