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;
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试制作一个可以将句子(字符串)拆分为单词数组(也是字符串)的函数,但它不会编译并显示error: implicitly declaring library function 'strlen' with type 'unsigned long (const char *)' [-Werror,-Wimplicit-function-declaration]. 它说我正在输入一个 unsigned long 作为 strlen() 的参数,但我不是。我有#include <stdio.h>我的代码。
您需要为#include <string.h>获得正确的定义strlen()。
隐式声明是过去几年来的一个可怕的错误。
总是用gcc -Wall -Werror.
此外,returnStrings是一个 NULL 指针,您从不分配内存,但尝试取消引用它。
另外,这是错误的:
returnStrings[sizeof(returnStrings)/sizeof(returnStrings[0])]
Run Code Online (Sandbox Code Playgroud)
您可能在 google 上搜索了“C 获取数组大小”并应用了该模式,但忽略了诸如“这仅适用于数组而不适用于指针”之类的警告。如果你在指针上使用它,它会编译,但会给出错误的结果。”
另外,这是错误的:
... += str[i]
Run Code Online (Sandbox Code Playgroud)
您不能使用+=运算符将字符附加到 C 中的“字符串” 。这将操纵指针,这根本不是您想要的。