【问题标题】:C - strsep() function with int error, return value is char*C - strsep() 函数有 int 错误,返回值为 char*
【发布时间】:2016-03-26 11:17:40
【问题描述】:

我在 C 代码中使用了 strsep(),但出现了这个错误。

void    get_token()
{ 
    char    *token;
    char    *stringp;
    int n = 1;

    stringp = buf;

    while( stringp != NULL )
    {
            token = strsep(&stringp, "\t\n");
            switch(n) {
            case 1 : strcpy(label, token);
            case 2 : strcpy(opcode, token);
            case 3 : strcpy(operand, token);
            } n++;
    }
}

这是我的代码,我像这样使用 strsep()。 我不知道错误所说的 int。 strsep() return char* 我想。

【问题讨论】:

  • 你是不是忘了#include <string.h>
  • buf 是数组(全局)
  • 我已经添加了string.h
  • 你的图片描述说这不是一个错误,它只是一个警告
  • 发布的代码由于许多不同的原因无法编译。请发布编译的代码,除了指出的问题。

标签: c strsep


【解决方案1】:

您正在使用未在 <string.h> 中声明 strsep() 的实现。

后果是;

  1. 编译器假定strsep() 返回int(因此是第一个警告)
  2. 链接器 (ld) 在链接中包含的库中找不到名为 strsep() 的函数(因此有关 strsep() 的错误无法由 ld 解决)。

出现这种情况的原因是strsep() 不是标准 C 库的一部分。您要么需要获得一个包含它的库,要么需要“推出自己的”版本的strsep()

【讨论】:

  • 即使我声明了它也不起作用 所以我做了 strsep() 函数。
  • 注意:strsep() 不是 POSIX 函数。它最初是在 BSD、AFAIK 上提供的,现在可能在其他一些平台上可用,例如 Linux。
  • 要使用 GCC 在 Linux 上通过 strings.h 提供 strsep(),您需要 #define _BSD_SOURCE。供您参考这里的 Linux 手册页:man7.org/linux/man-pages/man3/strsep.3.html
猜你喜欢
  • 1970-01-01
  • 2015-01-15
  • 2015-12-28
  • 1970-01-01
  • 2015-03-03
  • 1970-01-01
  • 2021-02-09
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多