这个字符串数组初始化是带和不带大括号,数组名做形参是程序运行报告不一样
根据以上可以看出,backtrace_symbols和backtrace_symbols_fd可以用来将函数指针转换为函数名,函数指针的讲解可以参考这里,以下是测试例:
#include<stdio.h>
#include<execinfo.h>
void hello_world()
{
printf("hello world!\n");
}
int main()
{
void *func = hello_world; //注意这里必须转化为一个void *指针
backtrace_symbols_fd(&func, 1, 1);
return 0;
}
这里就把函数指针func的函数名输出了出来。
我在进行字符串数组初始化时,使用了大括号和不使用大括号会有警告提示,这是为什么?
使用大括号进行初始化时,需要将每个字符串都放在大括号内,并使用逗号隔开,例如:
char str_arr[][20] = {"hello", "world"};
不使用大括号时可以将每个字符串单独赋值,例如:
char str_arr[2][20]; strcpy(str_arr[0], "hello"); strcpy(str_arr[1], "world");
警告提示可能是因为初始化时使用了错误的语法格式,或者字符串长度超过了预设的大小,需要检查代码并进行修改。
当我把字符串数组作为函数形参时,程序的运行结果也会不同,你能给我一些解释和提示吗?
当将字符串数组作为函数形参传递时,可以使用以下两种方式:
方式一:将数组名作为形参
void func(char str_arr[][20], int n); //在函数内部使用str_arr[i]来访问字符串,n为字符串数量
方式二:将指针类型作为形参
void func(char** str_arr, int n); //在函数内部使用str_arr[i]来访问字符串,n为字符串数量
需要注意的是,使用方式一时数组大小应当在函数外部定义好,使用方式二时需要在函数内部进行内存分配。另外,将字符串数组作为形参时,尽量使用const关键字来修饰,以防止误操作修改字符串内容。
第四行已经定义了array_1是全局字符串,main里你又定义一遍