gpt4 book ai didi

c - C 中的字符串连接函数不执行任何操作,那么正确的方法是什么?

转载 作者:行者123 更新时间:2023-11-30 18:43:24 25 4
gpt4 key购买 nike

我正在学习C语言...

我想编写一个连接两个字符串的函数。我写了一个函数,但它不起作用;它在编译时不会给出任何错误,但在运行时它不会执行任何操作。

这是我的代码:

char* str_sum(char* s1, char* s2){
int j = strlen(s1);
int i=0;
while(s2[i]){
s1[j]=s2[i];
j++;
i++;
}
return s1;
}
int main(){
char* s1, s2;
s1 = "Joe";
s2 = "Black";
printf("%s\n",sum_str(s1,s2));
return 0;
}

最佳答案

您的函数可能如下所示:

char* sum_str(char* s1, char* s2)
{
int lenS1 = strlen(s1);
int lenS2 = strlen(s2);
char* newString = malloc((lenS1 + lenS2 + 1) * sizeof(char));
int i = 0;
while(i < lenS1)
{
newString[i] = s1[i];
i++;
}
while(i < lenS2 + lenS1)
{
newString[i] = s2[i - lenS1];
i++;
}
newString[i] = '\0';
return newString;
}

请注意,此函数会分配新字符串,这意味着您在使用完此字符串后应释放此数据。另请注意,终止字符 ('\0') 存储在该 char 数组的末尾,以便 printf 可以正确“打印”它。

主要内容如下:

int main()
{
char *s1, *s2, *s3;
s1 = "Joe";
s2 = " Black";
s3 = sum_str(s1,s2);
printf("%s\n", s3);
free(s3);
return 0;
}

输出:乔·布莱克

请注意,我已声明变量 s1s2s3,如下所示:char *s1、*s2、*s3 ;。如果我这样写: char *s1, s2, s3; 那么变量 s2s3 不再是字符数组,而只是字符.

另请注意该程序:

  char *s1 = "Joe";
s1[0] = 'X';
printf("%s\n", s1);

会崩溃,因为它尝试更改常量字符串文字“Joe”。在本例中,s1 是指向该文字的第一个字符的指针。

但是这个程序可以正常工作,其输出将为Xoe:

  char s1[] = "Joe";
s1[0] = 'X';
printf("%s\n", s1);

s1 是一个用字符串 "Joe" 初始化的数组,因此可以更改它。

关于c - C 中的字符串连接函数不执行任何操作,那么正确的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9215730/

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