#include <stdio.h>
#include <string.h>
int myprint(char_array){
char mystring[80];
strcat(mystring, "\n");
printf("%s", mystring);
return 0;
}
int main(int argc, char** argv){
int count = 5;
char letter = 'c';
printf("decimal: %d, char: %c\n", count, letter);
myprint("sup");
return 0;
}
我在编译时收到警告:
cchilders:~/projects/buildyourownlisp_in_C/ch3 [master]$ compile basics.c basics
basics.c: In function ‘myprint’:
basics.c:4:5: warning: type of ‘char_array’ defaults to ‘int’
int myprint(char_array){
^
它编译,但我的myprint
函数不起作用:
cchilders:~/projects/buildyourownlisp_in_C/ch3 [master]$ ./basics
decimal: 5, char: c
我看到了这个答案warning: return type defaults to ‘int’ [-Wreturn-type],但由于我确实声明int main(...)
我也看到了这个功能声明:
return_type function_name( parameter list ) {
body of the function
}
对于myprint
我宣布为int
并返回0
。这个警告意味着什么,为什么我的功能不起作用?谢谢
解答:
void myprint(char mystring[]){
strcat(mystring, "\n");
printf("%s", mystring);
}
安静警告,但导致Segmentation fault (core dumped)
更改为
void myprint(char[] mystring){
strcat(mystring, "\n");
printf("%s", mystring);
}
使情况变得更糟:
cchilders:~/projects/buildyourownlisp_in_C/ch3 [master]$ cc -std=c99 -Wall basics.c -o basics
basics.c:4:21: error: expected ‘;’, ‘,’ or ‘)’ before ‘mystring’
void myprint(char[] mystring;){
^
basics.c: In function ‘main’:
basics.c:15:5: warning: implicit declaration of function ‘myprint’ [-Wimplicit-function-declaration]
myprint("sup");
^
我也试过
void myprint(char[] mystring;){...
和
void myprint(char[] mystring,){...
答案 0 :(得分:3)
您没有在
中为char_array提供数据类型int myprint(char_array)
你需要char *或任何你想要的东西。
答案 1 :(得分:3)
首先,函数定义应该像
return-type function-name ( parameter-type parameter-name, parameter-type parameter-name)
{ ... }
您未指定参数类型或参数名称。如果你的意思是char_array表示一个类型,你需要首先使用typedef或struct或其他东西来定义它。如果您的意思是char_array是参数名称,则需要指定其类型,如
char[] char_array
说。此外,在这种情况下,您实际上并未在函数myprint中的任何位置使用变量char数组。所以论证&#34; sup&#34;没有被使用。
编辑问题后:
尝试
char str[] = "sup";
myprint(str);
代替。据我所知,你不能按值传递字符串(字符数组)。
答案 2 :(得分:3)
正如其他人所指出的那样,您没有为char_array
指定类型,因此假定它是int
。将其更改为char char_array[]
可解决此问题。
您的另一个问题是您正在将字符串常量("sup"
)传递给此函数,然后尝试对其进行修改。字符串常量存储在内存的只读部分,因此您无法对其进行修改。
鉴于您只使用换行符打印字符串,您可以改为:
void myprint(char mystring[]){
printf("%s\n", mystring);
}
答案 3 :(得分:2)
int myprint(char_array)
type 的参数名称为char_array
?因为您没有指定它,编译器认为它是int
。幸运的是,它会警告你。
答案 4 :(得分:2)
您需要指定希望传递给函数的参数类型。功能也有错误。 char_array
属于char*
类型。您需要将传递的数组的每个部分复制到本地数组,然后只能调用printf才能使此函数正常工作