所以我是C的新手,当我遇到https://www.gnu.org/software/libc/manual/html_node/strfry.html#strfry时,我正在玩GNU C库中的函数.
好奇,我写了一个小测试程序:
1 #include <stdio.h>
2 #include <string.h>
3
4 main ()
5 {
6 char *str = "test123abc";
7 char *other;
8
9 other = strfry(str);
10 printf("%s\n", other);
11 return 0;
12 }
Run Code Online (Sandbox Code Playgroud)
gcc test.c 输出 test.c:9: warning: assignment makes pointer from integer without a cast
为什么?
/usr/include/string.h 有以下条目:
extern char *strfry (char *__string) __THROW __nonnull ((1));
如何char *function(...)回归int?
谢谢
由于strfry是GNU扩展,您需要#define _GNU_SOURCE使用它.如果您未能提供#define,则声明将不可见,编译器将自动假定该函数返回int.
正如perreal所指出的,一个相关的问题是修改文字字符串是未定义的行为.一旦您strfry向编译器声明了可见声明,就会适时报告.
请注意,该strfry功能及其表兄memfrob并不完全严重,很少用于生产.