C 通过交换函数进行字符串交换
我已经编写了交换字符串的代码,但是我不能交换字符串。问题是什么?如何使用函数C 通过交换函数进行字符串交换,c,string,pointers,C,String,Pointers,我已经编写了交换字符串的代码,但是我不能交换字符串。问题是什么?如何使用函数swap解决问题 #include <stdio.h> void swap( char*,char*); int main() { char *ptr[2] = {"hello", "morning"}; swap(ptr[0], ptr[1]); printf("%s %s", ptr[0], ptr[1]); return 0; } void swap(char *t1
swap
解决问题
#include <stdio.h>
void swap( char*,char*);
int main()
{
char *ptr[2] = {"hello", "morning"};
swap(ptr[0], ptr[1]);
printf("%s %s", ptr[0], ptr[1]);
return 0;
}
void swap(char *t1, char*t2)
{
char *t;
t = t1;
t1 = t2;
t2 = t;
}
#包括
无效互换(字符*,字符*);
int main()
{
char*ptr[2]={“你好”,“早上好”};
掉期(ptr[0],ptr[1]);
printf(“%s%s”,ptr[0],ptr[1]);
返回0;
}
无效交换(字符*t1,字符*t2)
{
char*t;
t=t1;
t1=t2;
t2=t;
}
我还试图传递
(&ptr[0],&ptr[1])
,但这里显示了一个。此外,我还制作了一个char,*p1=ptr[0],char*p1=ptr[1]
,然后将&p1
和&p2
传递到交换
,但仍然会出现分段错误。您需要传递指向字符串的指针来交换它们(char**)。否则,您所做的更改将是交换函数的本地更改
void swap( char **t1,char **t2)
{
char *t;
t = *t1;
*t1 = *t2;
*t2 =t;
}
int main()
{
char *ptr[2] = {"hello","mornig"};
swap(&ptr[0], &ptr[1]);
printf("%s %s",ptr[0],ptr[1]);
return 0;
}
您需要向字符串传递指针以交换它们(char**)。否则,您所做的更改将是交换函数的本地更改
void swap( char **t1,char **t2)
{
char *t;
t = *t1;
*t1 = *t2;
*t2 =t;
}
int main()
{
char *ptr[2] = {"hello","mornig"};
swap(&ptr[0], &ptr[1]);
printf("%s %s",ptr[0],ptr[1]);
return 0;
}
您需要传入指向char数组指针的指针,以便切换它们。通过这样做,您可以交换这些指针的值。(哪些是实际阵列。)
#包括
无效交换(字符**,字符**);
int main()
{
char*ptr[2]={“你好”,“早上好”};
掉期(&ptr[0]、&ptr[1]);
printf(“%s%s”,ptr[0],ptr[1]);
返回0;
}
无效交换(字符**t1,字符**t2)
{
char*t;
t=*t1;
*t1=*t2;
*t2=t;
}
您需要传入指向字符数组指针的指针,以便切换它们。通过这样做,您可以交换这些指针的值。(哪些是实际阵列。)
#包括
无效交换(字符**,字符**);
int main()
{
char*ptr[2]={“你好”,“早上好”};
掉期(&ptr[0]、&ptr[1]);
printf(“%s%s”,ptr[0],ptr[1]);
返回0;
}
无效交换(字符**t1,字符**t2)
{
char*t;
t=*t1;
*t1=*t2;
*t2=t;
}
C函数参数是按值传递的。您正在将地址值传递给swap
函数,并希望这些值(地址)发生更改。但只有交换
函数中的地址副本发生更改
要更改实际传入的地址,您需要一个传统级别的引用:
void swap(char **t1, char **t2)
{
char *t;
t = *t1;
*t1= *t2;
*t2 = t;
}
并将其称为
swap
如下:swap(&ptr[0],&ptr[1])代码>C函数参数是按值传递的。您正在将地址值传递给swap
函数,并希望这些值(地址)发生更改。但只有交换
函数中的地址副本发生更改
要更改实际传入的地址,您需要一个传统级别的引用:
void swap(char **t1, char **t2)
{
char *t;
t = *t1;
*t1= *t2;
*t2 = t;
}
并将其称为swap
如下:swap(&ptr[0],&ptr[1])代码>char*ptr[2]={“你好”,“早上好”}代码>-此语句表示您正在分配一个大小为2的数组,该数组将存储两个字符串的地址(即char*
)。现在,您给出的两个字符串将位于文本段中,这是一个只读数据。如果我们试图修改它,将导致崩溃(心理状态故障)
因此,如果调用swap(&ptr[0]),&ptr[1])
会导致崩溃。因为您正试图在第一个只读字符串h
中写入字符m
。无法写入文本段中的字符串
如果只想交换字符串,可以将函数调用为swap(&ptr[0],&ptr[1])
,这相当于swap((ptr+0),(ptr+1))代码>
并更改交换功能,如下所示
void swap( char **t1,char **t2)
{
char *t;
t = *t1;
*t1 = *t2;
*t2 =t;
}
这里我们只是交换存储在数组指针ptr
中的字符串地址 char*ptr[2]={“你好”,“早上好”}代码>-此语句表示您正在分配一个大小为2的数组,该数组将存储两个字符串的地址(即char*
)。现在,您给出的两个字符串将位于文本段中,这是一个只读数据。如果我们试图修改它,将导致崩溃(心理状态故障)
因此,如果调用swap(&ptr[0]),&ptr[1])
会导致崩溃。因为您正试图在第一个只读字符串h
中写入字符m
。无法写入文本段中的字符串
如果只想交换字符串,可以将函数调用为swap(&ptr[0],&ptr[1])
,这相当于swap((ptr+0),(ptr+1))代码>
并更改交换功能,如下所示
void swap( char **t1,char **t2)
{
char *t;
t = *t1;
*t1 = *t2;
*t2 =t;
}
这里我们只是交换存储在数组指针ptr
中的字符串地址