取消引用char指针运行时错误

Eng*_*999 2 c string pointers char

为什么以下代码导致运行时崩溃?

代码本身不是很有用,但是,通过创建指向char指针并指向main中的字符串文字的指针,将此指针传递给我的函数并尝试读取字符串会导致问题.为什么呢?

通过在main中创建一个字符串数组(注释掉),传递和读取字符串没有问题.提前感谢您的知识.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* GetString(char** strs, int strsSize);

char* GetString(char** strs, int strsSize)
{
    return *strs;
}

int main()
{

    char** stringArr = {"ab", "abc", "abcd"};
    //char* stringArr [] = {"ab", "abc", "abcd"};

    char* resultStr;
    resultStr = GetString(stringArr, 3);

    printf("%s\n", resultStr);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

dbu*_*ush 5

初始化程序stringArr无效.你有一个指向指针的指针,而不是一个数组.无法使用{}语法初始化指针.

编译时-Wall -Wextra,会产生以下警告:

/tmp/x1.c: In function ‘main’:
/tmp/x1.c:15: warning: initialization from incompatible pointer type
/tmp/x1.c:15: warning: excess elements in scalar initializer
/tmp/x1.c:15: warning: (near initialization for ‘stringArr’)
/tmp/x1.c:15: warning: excess elements in scalar initializer
/tmp/x1.c:15: warning: (near initialization for ‘stringArr’)
Run Code Online (Sandbox Code Playgroud)

您注释掉的声明是正确的.

这两个声明都有效,GetString因为数组在传递给函数时会衰减为指向第一个元素的指针.但是,指针和数组不是一回事.