初始化字符串数组有警告

这个字符串数组初始化是带和不带大括号,数组名做形参是程序运行报告不一样

img

img

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7676473
  • 这篇博客也不错, 你可以看下猜数(含代码)计算机自动随机生成一个数,用户通过输入数字来猜数,来与随机数进行匹配并显示正确与否
  • 除此之外, 这篇博客: 【调试】打印函数栈,以及由函数指针输出函数名的方法中的 由函数指针得到函数名 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 根据以上可以看出,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的函数名输出了出来。

  • 您还可以看一下 李振良老师的中大型网站架构演进与建设实践课程中的 网站架构图介绍与环境准备小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    我在进行字符串数组初始化时,使用了大括号和不使用大括号会有警告提示,这是为什么?

    使用大括号进行初始化时,需要将每个字符串都放在大括号内,并使用逗号隔开,例如:

    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里你又定义一遍