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)
第一行线定义了一个包含四个字节的数组.这两个是等价的:
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)