gpt4 book ai didi

c++ - 反转 char 数组导致访问冲突

转载 作者:行者123 更新时间:2023-11-28 06:21:30 25 4
gpt4 key购买 nike

我只是想编写一个代码来反转 char 数组(或指针 char 。我失败了,所以使用了 char 数组)。就像“USAF”会变成“FAUS”一样,我首先用指针做了这个,所以我遇到了访问冲突。

代码:

    #include <iostream>

using namespace std;

int getlength(char *);
void reverse (char * ch );

int main ()
{
char *ch ="USAF";
/*cout<<*ch;*/

int len = getlength(ch);
reverse(ch);

cout<<"Reverse :";


for(int i =0;i <len; i++)
cout<<*(ch + i);

cin.get();

}


int getlength(char * ch)
{
int len=0;
char *address = ch;
for(; *(ch)!='\0' ; ch++)
len++;

ch=address;
return len;
}

void reverse(char *ch )
{
char tmp;
int i,j,len=getlength(ch);

for(i=0;i<(len/2);i++)
for(j=len-1;j>(len/2);j--){
tmp=*(ch+i);
*(ch+i)=*(ch+j); //ACCESS VIOLATED
*(ch+j)=tmp;


}

为什么会这样? ch+i 和 + j 是 char 指针的长度(数组真的我现在应该怎么调用它?)但是它抛出一个 c ?

我当前的代码几乎没有指针,但由于数组在某种程度上是指针,它们通过引用重新调用,所以我想我做到了:

   #include <iostream>

using namespace std;

void reverse (char ch [],int len);

int main ()
{
char ch [] ="USAF";
int len = sizeof(ch);
reverse(ch,len);

cout<<"Reverse :";

for(int i =0;i <len; i++)
cout<<ch[i];
cin.get();

}



void reverse(char ch [],int len)
{

int i,j;
char tmp;
for(i=0;i<len;i++)
cout<<*(ch+i);

cout<<*(ch+(3-1));


for(i=0;i<(len/2);i++)
for(j=len-1 ; j>(len/2);j--){

tmp = ch[i];
ch[i]=ch[j];
ch[j]=tmp;

}

但是当我编译它时它显示:“F AUS”从那个空白字符出现的地方太奇怪了? (一些 cout 行只是剩菜,不要介意)

PS:这是我在 stackoverflow 中的第一篇文章(很酷的名字 btw :))。我真的很喜欢这里专业的氛围,发现这是一个问自己问题的好地方 + 当我获得大量知识时回答其他人。

最佳答案

变量ch 指向一个字符串文字,它是一个常量 字符数组。换句话说,试图改变它会导致undefined behavior。 .

而不是将其声明为数组时,例如

char ch[] = "USAF";

然后编译器在堆栈上创建字符串,它不是常量,因此您可以更改数组的内容。

关于c++ - 反转 char 数组导致访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29230751/

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