【发布时间】:2017-01-04 15:42:33
【问题描述】:
为什么下面的代码会导致运行时崩溃?
代码本身并不是很有用,但是,通过在 main 中创建一个指向 char 指针并指向字符串文字的指针,将此指针传递给我的函数并尝试读取字符串会导致问题。为什么会这样?
通过在 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;
}
【问题讨论】:
-
指针不是数组;数组不是指针。
-
为什么你使用的编译器没有提供关于
char** stringArr = {"ab", "abc", "abcd"};的警告? -
铭文。现在见他们。为什么不应该是编译器错误而不是警告?
-
发布的代码无法编译。编译时,始终启用所有警告,然后修复这些警告。 (对于
gcc,至少使用:-Wall -Wextra -pendantic我也使用:-Wconversion -std=gnu99)警告:未使用的参数:strsSize可以通过插入语句(void)strsSize;来修复。并且strArray的声明不正确。