什么是"abc"和C中的{"abc"}之间的区别?

use*_*026 4 c++ string pointers

在C中(我想这也适用于C++),有什么区别

char str[4] = "abc";
char *cstr = {"abc"};
Run Code Online (Sandbox Code Playgroud)

当我尝试将"abc"传递给接受char**的函数时出现问题

void f(char** s)
{
  fprintf(stderr, "%s", *s);
}
Run Code Online (Sandbox Code Playgroud)

执行以下操作会产生编译器错误.如果转换为char**(使编译器满意)程序seg错误.

f(&str);
Run Code Online (Sandbox Code Playgroud)

但是以下工作正常

f(&cstr[0]);
Run Code Online (Sandbox Code Playgroud)

Joh*_*kin 9

第一行线定义了一个包含四个字节的数组.这两个是等价的:

char str[4] = "abc";
char str[4] = {'a', 'b', 'c', 0};
Run Code Online (Sandbox Code Playgroud)

第二行声明一个指向内存位置的指针,其中包含字节'a','b','c'和0.这两个是等效的:

char *cstr = {"abc"};
char *cstr = "abc";
Run Code Online (Sandbox Code Playgroud)

你的问题来自混合char[]char*.如果函数接受a char**,则必须创建一个char*以获取以下地址:

char str[4] = "abc";
char *cstr = str;
f(&cstr);
Run Code Online (Sandbox Code Playgroud)