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
中的字符串地址