gpt4 book ai didi

c - 指针数组 *(*(string+i)+j)。 (这可能吗?)

转载 作者:太空宇宙 更新时间:2023-11-04 01:33:02 26 4
gpt4 key购买 nike

在这段代码中,我尝试使用一个函数来反转字符串。在这里,我使用了一个指针数组来存储一些数组。*(*(string+i)+j)这一行适用于 i=0 但一旦 i 递增到 i=1 它就会出现段错误。我无法理解可能是什么问题。

#include<stdio.h>
#include<string.h>
char**reverse(char**);
int main()
{
char *final[2],*s[] = {
"To err is human...",
"But to really mess things up...",
"One needs to know C!!"
} ;
int i;
for(i=0;i<=2;i++)
puts(s[i]);
reverse(s);
for(i=0;i<=2;i++)
puts(final[i]);
return 0;
}
char** reverse(char*string[2])
{
char *temp[2];
int len,i,j,k;
for(i=0;i<=2;i++)
{
len=strlen(string[i]);
k=0;
for(j=len-1;j>=0;j--)
{
*(*(temp+i)+k)=*(*(string+i)+j);
/*this line work for i=0 but give segmentation fault for i=1;*/

printf("%c",*(*(temp+i)+k));
k++;
}
printf("\n");

}
return temp;
}

最佳答案

这里有不少问题:

  1. temp中的指针是未初始化的,temp是一个本地栈数组。你不能返回,因为它会超出范围

  2. 您没有对“reverse”的返回值做任何事情

  3. 您的初始数组大小为 3,而不是大小 2。

  4. 无需使用令人困惑的 (*(string+i)+j) 表示法。 string[i][j] 也能正常工作,而且可读性更高。

  5. 您不会在反转字符串后终止字符串。你需要 temp[i][k]='\0';在 for 循环之后执行此操作。

为获得您想要的结果而对代码进行最简单的修改可能是这样的。

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

char**reverse(char**);

int main()
{
char **final,*s[] = {
"To err is human...",
"But to really mess things up...",
"One needs to know C!!"
} ;
int i;
for(i=0;i<=2;i++)
puts(s[i]);
final = reverse(s);
for(i=0;i<=2;i++)
puts(final[i]);
return 0;
}

char**reverse(char*string[3])
{
char **temp = malloc(sizeof(char*) * 2);
int len,i,j,k;

for (int i=0; i < 3; i++)
{
temp[i] = malloc(sizeof(char) * 512);
}

for(i=0;i<=2;i++)
{
len=strlen(string[i]);
k=0;
for(j=len-1;j>=0;j--)
{
*(*(temp+i)+k)=*(*(string+i)+j);
printf("%c",*(*(temp+i)+k));
k++;
}
temp[i][k]='\0';
printf("\n");
}
return temp;
}

程序输出为:

To err is human...

But to really mess things up...

One needs to know C!!

...namuh si rre oT

...pu sgniht ssem yllaer ot tuB

!!C wonk ot sdeen enO

关于c - 指针数组 *(*(string+i)+j)。 (这可能吗?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19676097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com