C语言 将一个字符串添加到另一个字符串



练习:

编写一个函数,该函数在作为参数给出的 CH2 字符串末尾添加 CH1 字符串后返回 CH 字符串。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
char *ajout(char ch1[], char ch2[]);
int main() {
char ch1[] = "hello";
char ch2[] = "ooo";
char *ch = ajout(ch1, ch2);
printf("%s",ch);
return 0;
}
char *ajout(char ch1[], char ch2[]) {
char *ch;
int nb = 0;
for (int i = 0; ch1[i] != ''; i++) {
ch[i] = ch1[i];
nb++;
}
int i = 0;
for (i; ch2[i] != ''; i++) {
ch[nb] = ch2[i];
nb++;
}
return ch;
}

程序执行后的预期结果:helloooo

首先,C 中的字符串只是指向由第一个空字符终止的字符数组的指针。C 语言中没有字符串连接运算符。

另外,为了在 C 中创建一个新数组 - 您需要使用malloc为其分配内存。但是,在ajout函数中,您不会为ch分配任何内存。溶液:

const size_t len1 = strlen(ch1); //get ch1 length
const size_t len2 = strlen(ch2); //get ch2 length
char *ch = malloc(len1 + len2 + 1); //create ch with size len1+len2+1 (+1 
//for null-terminator)

我看到你把ch1的每个字符和ch2一个一个地复制到ch中。更好的解决方案是复制ch1并使用memcpych2。另外,在使用malloc分配内存后,您需要使用free来释放字符串:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* ajout(const char *ch1, const char *ch2)
{
//get length of ch1, ch2
const size_t len1 = strlen(ch1);
const size_t len2 = strlen(ch2);
//create new char* array to save the result 
char *result = malloc(len1 + len2 + 1); // +1 for the null-terminator
// in real code you would check for errors in malloc here
//copy ch1, ch2 to result
memcpy(result, ch1, len1); 
memcpy(result + len1, ch2, len2 + 1); // +1 to copy the null-terminator
return result;
}
int main()
{
char ch1[] = "hello";
char ch2[] = "ooo";
char *ch = ajout(ch1,ch2);
printf("%s",ch);
free(ch); // deallocate the string
return 0;
}

输出: 你好

您可以在此处阅读有关memcpy的更多信息,在此处阅读有关malloc的更多信息。

相关内容

  • 没有找到相关文章

最新更新