将const * char传递给strlen()表示我正在传递无符号长号

问题描述 投票:0回答:1
char** strsep(const char* str)
{
    char** returnStrings = NULL;
    for (int i = 0; i < strlen(str); i++)
    {
        if (str[i] == ' ') returnStrings[sizeof(returnStrings)/sizeof(returnStrings[0])] = "";
        else returnStrings[sizeof(returnStrings)/sizeof(returnStrings[0])] += str[i];
    }
    return returnStrings;
}

我正在尝试创建一个函数,该函数可以将一个句子(字符串)拆分为一个单词(也包括字符串)数组,但是它将无法编译并显示error: implicitly declaring library function 'strlen' with type 'unsigned long (const char *)' [-Werror,-Wimplicit-function-declaration]。它说我要输入一个无符号长作为strlen()的参数,但我不是。

c strlen
1个回答
2
投票

您需要#include <string.h>才能获得strlen()的正确定义。

隐式声明是几年前的一个严重错误。

总是用gcc -Wall -Werror编译。


此外,returnStrings是NULL指针,您从不分配内存,但尝试取消引用它。


而且,这是错误的:

returnStrings[sizeof(returnStrings)/sizeof(returnStrings[0])]

您可能用谷歌搜索了“ C获取数组的大小并应用了该模式,但是忽略了这样的警告:”这仅适用于arrays而不适用​​于指针。如果在指针上使用它,它将编译但给出不正确的结果。“


而且,这是错误的:

... += str[i]

您无法使用+=运算符将字符附加到C中的“字符串”。这将操纵指针,这根本不是您想要的。


0
投票

除了您缺少<string.h>的声明外,这似乎是您的错误。

strtok()不适合您想要的更好吗?既然您提到过,您想将一个句子拆分为一系列也是字符串的单词?

© www.soinside.com 2019 - 2024. All rights reserved.