我在函数返回类型和指针方面遇到了一些麻烦(对不起,如果这是一个愚蠢的问题,但在相当长的一段时间内没有编程C)。当我运行这个:
#include <stdio.h>
#include <string.h>
#include <strings.h>
char *parse(char const *data) {
return data;
}
int main(int argc, const char *argv[]) {
char *a = "# Test";
char newString = parse(a);
printf("%s\n", &newString);
return 0;
}
我收到错误:
writer.c: In function ‘parse’: writer.c:6: warning: return from incompatible pointer type
writer.c:6: warning: function returns address of local variable writer.c: In function ‘main’:
writer.c:11: warning: initialization makes integer from pointer without a cast
有什么想法吗?
答案 0 :(得分:2)
parse(a)
返回char*
,而newString的类型为char
,因此它们不兼容。
改变这个:
char newString = parse(a);
printf("%s\n", &newString);
到此:
char *newString = parse(a);
printf("%s\n", newString);
关于您的错误/警告:
writer.c:在函数'parse'中: writer.c:6:警告:从中返回 不兼容的指针类型
当函数返回类型为const char*
char*
writer.c:6:警告:函数返回 本地变量writer.c的地址:在 功能
数据被视为局部变量,并且您返回此地址,如果在函数内部定义了该地址,则可能会有危险。
'main':writer.c:11:警告: 初始化从中生成整数 没有演员的指针
您将char*
分配给char
。
作为旁注:当你使用char指针指向常量字符串时,将其设为const:const char *a = "# Test";