gpt4 book ai didi

c - 如何在C中交换字符串?

转载 作者:行者123 更新时间:2023-12-01 22:20:26 25 4
gpt4 key购买 nike

我正在尝试用 C 编写一个函数来交换两个字符串变量,但出了点问题,程序崩溃了。

请看一下我的代码,告诉我哪里出错了:

#include <string.h>

void strswap(char name1[], char name2[]) // to swap two strings
{
int lengthname1, lengthname2;
lengthname1 = strlen(name1);
lengthname2 = strlen(name2);
char temporaryname1[100];
char temporaryname2[100];
int x;
int y;
// till just the declaration
for (int x = 0; x < lengthname1; lengthname1++) {
temporaryname1[x] = name1[x];
name1[x] = ' ';
}
// copying the value of name1 in temporaryname1
for (int y = 0; y < lengthname2; lengthname2++) {
temporaryname2[x] = name2[x];
name2[x] = ' ';
}
// copying the value of name2 in temporaryname2
for (int x = 0; x < lengthname1; lengthname1++) {
name1[x] = temporaryname2[x];
}
for (int y = 0; y < lengthname2; lengthname2++) {
name2[x] = temporaryname1[x];
}
}


#include <stdio.h>
int main()
{
char name[] = "hello";
char name2[] = "hi";
printf("before swapping: %s %s\n", name, name2);
strswap(name, name2);
printf("after swapping: %s %s\n", name, name2);
}

编辑:- 我已经更正了程序并且它工作正常。很快我的头文件将与其他一些模块一起工作。谢谢大家的帮助,尤其是@Micheal

最佳答案

有很多问题:

第一期

x 变量未初始化:

    int x; int y;  // first declaration of x

// till just the declaration
for(int x=0;x<lengthname1;lengthname1++)
{// ^ second declaration of x , local to the loop
temporaryname1[x]=name1[x];
name1[x]=' ';
}

// if you use x here it's the first x that has never been initialized

第二期

这个:

for (x = 0; x<lengthname1; lengthname1++)

应该是:

for (x = 0; x<lengthname1 + 1; x++)

为什么 lengthname1 + 1 ?因为您需要复制终止字符串的 NUL 字符。

在您的其他 for 循环中也存在类似的问题。

例如,在这里您使用 y 作为循环变量,但在循环中您使用 x:

for (int y = 0; y<lengthname2 + 1; lengthname2++)
{
name2[x] = temporaryname1[x];

第三期

main 中声明:

char name[] = "hello";
char name2[] = "hi";

其实是一样的

char name[6] = "hello";  // 5 chars for "hello" + 1 char for the terminating NUL
char name2[3] = "hi"; // 2 chars for "hi" + 1 char for the terminating NUL

现在即使您的 strswap 是正确的,您也在尝试将 name 数组(“hello”)中的 6 个字节填充到 3 个字节的数组 name2name2 数组中没有足够的空间。这是未定义的行为。

最后但同样重要的是:

这根本没用:

name1[x] = ' ';

最后

您应该问问自己为什么在 strswap() 中需要两个临时字符串(temporaryname1temporaryname2)- 一个就足够了。

关于c - 如何在C中交换字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40485090/

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