Rnd*_*p13 0 c pointers char segmentation-fault
在编译和执行以下程序时,我在编译期间收到警告并在执行期间发生seg错误.
警告
program.c: In function main:
program.c:17: warning: passing argument 2 of convertString from incompatible pointer type
Run Code Online (Sandbox Code Playgroud)
第17行是打电话给 convertString(input, &output);
附加调试器可以看到在下面的行发生了段错误
Program received signal SIGSEGV, Segmentation fault.
0x0000000000400521 in convertString (input=0x7fffffffd100 "abcdefg", output=0x7fffffffd0f0) at program.c:9
9 **output = *input;
(gdb) s
#include<stdio.h>
#include<string.h>
void convertString(char *input, char **output)
{
if(strlen(input)== 0)
{
return;
}
**output = *input;
(*output)++;
convertString(input+1,output);
}
int main()
{
char input[] = "abcdefg";
char output[sizeof(input)];
convertString(input, &output);
printf("%s", output);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
请帮助我在哪里做错了.
问题是它output不是一个指针,它是一个数组,并且在数组上使用address-of运算符会给你一个指向数组的(单个)指针(在你的类型的情况下char (*)[8]).为了澄清:(void *) output == (void *) &output数组的衰减指针和指向数组的指针都是相同的.
所以你并没有真正传递一个指向char函数指针的指针.
除了上面的内容,我认为该函数没有理由采用指针指针,普通的单指针应该足够了.否则output,在printf调用中使用时会得到错误的结果,因为它output会超出字符串的结尾.
此外,您不会终止output字符串.