strsep
使用该函数查找字符串的第一个单词似乎存在指针兼容性问题。到目前为止,我一直认为char *s
并且char s[]
完全可以互换。但似乎他们不是。我在堆栈上使用数组的程序失败并显示以下消息:
foo.c: In function ‘main’:
foo.c:9:21: warning: passing argument 1 of ‘strsep’ from incompatible pointer type [-Wincompatible-pointer-types]
char *sub = strsep(&s2, " ");
^
In file included from foo.c:2:0:
/usr/include/string.h:552:14: note: expected ‘char ** restrict’ but argument is of type ‘char (*)[200]’
extern char *strsep (char **__restrict __stringp,
我不明白这个问题。使用的程序malloc
有效。
这有效:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char s1[] = "Hello world\0";
char *s2 = malloc(strlen(s1)+1);
strcpy(s2, s1);
char *sub = strsep(&s2, " ");
printf("%s\n", sub);
return 0;
}
这不会:
#include <stdio.h>
#include <string.h>
int main(void)
{
char s1[] = "Hello world\0";
char s2[200];
strcpy(s2, s1);
char *sub = strsep(&s2, " ");
printf("%s\n", sub);
return 0;
}
有什么问题?(对不起strcpy
)。为什么函数指针指向堆栈或堆很重要?我理解为什么您不能访问二进制/文本段中的字符串,但是堆栈有什么问题?