【发布时间】:2020-10-11 10:37:39
【问题描述】:
有这个:
#define _DEFAULT_SOURCE 1
#include <stdio.h>
#include <string.h>
int main(){
char *token, org[] = "Cats,Dogs,Mice,,,Dwarves,Elves:High,Elves:Wood";
while((token=strsep(&org,",")))
printf("Token: %s\n",token);
}
给出错误(不兼容的指针类型):
/usr/include/string.h:439:14: note: expected ‘char ** restrict’ but argument is of type ‘char (*)[47]’
extern char *strsep (char **__restrict __stringp,
-
我知道它是不同的类型(一个已初始化内存 ->
org[],但该函数需要没有初始化任何内存的指针),但它们具有相同的行为,所以为什么它仍然抱怨? -
有人可以解释一下,这个关键字
restrict或__restrict在*strsep (char **__restrict __stringp,的情况下是什么意思(另一方面,我假设__stringp不是内部数据类型(因为双下划线),但只是一个花哨的变量名)。
编辑:
我认为一个数组存储在堆栈中,但是strsep 想要一个指向堆的指针,这可以通过将org 分配给malloc 然后memcpy 来完成,或者更好的是,复制字符串通过strdup(内部memcpy)。但无论如何,strsep 想要指向堆而不是堆栈的指针吗?两者都只是指针,只指向不同的地址,但这不应该介意。
【问题讨论】:
-
@Inian 你读过问题的标题吗?你刚才说,我在问什么
-
这个问题可能是stackoverflow.com/questions/17687429/…的部分重复