我有一个以特定方式混合2个字符串并生成新字符串的函数,如何分配新字符串的内存?
我曾尝试添加此代码,但不确定如何将其用于我不知道的字符串中。
#include <stdio.h>
#include <string.h>
char *CreateString(char *string1, char *string2) {
int size;
int size1 = 0;
int size2 = 0;
for (int i = 0; *(string1 + i); i++) {
size1++;
}
for (int i = 0; *(string2 + i); i++) {
size2++;
}
size = (size1 * size2) + size1;
char string[size];
char *stringptr = string;
for(int i = 0; i < size; i = i + size2 + 1) {
*(stringptr + i) = *(string1++);
for (int j = 0; j < size2; j++) {
*(stringptr + i + j + 1) = *(string2 + j);
}
}
puts(string);
}
int main() {
char string1[] = "chocolate";
char string2[] = "123";
CreateString(string1, string2);
return 0;
}
使用strlen
的string.h
例程:
size_t size=strlen(string);
size_t size2=strlen(string2);
size_t total_size=(size*size2)+size;
//now you make a malloc of a string result ugual to total_size+1 due to the fact the string end with "/0" character.
char* string_final;
string_final=malloc(sizeof(char)*(total_size+1));
if(string_final==NULL){
perror("Error in malloc");
}
else{
//...continue
}
当我运行您的代码时,我得到了字符串:
c123h123o123c123o123l123a123t123e123
似乎您想在string2
的每个字符之后添加string2
。
因此,在您的情况下,您可以致电malloc
:
size = (size1 * size2) + size1;
char *string = malloc(size + 1); // +1 for null character
if(!string) {
printf("cannot malloc for string\n");
return NULL;
}
您的函数应最后返回string
。当您不想使用string
以避免内存泄漏时,请不要忘记释放此函数的返回值。
下面的代码:
for(int i=0;*(string1+i);i++){
size1++;
}
for(int i=0;*(string2+i);i++){
size2++;
}
可以用strlen
功能代替:
size1 = strlen(string1);
size2 = strlen(string2);
您可以使用以下方式为字符串分配内存
char *stringptr = malloc(size + 1);
注意,您可以使用<string.h>
中的字符串函数来简化代码:>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *CreateString(const char *string1, const char *string2) {
size_t size1 = strlen(string1);
size_t size2 = strlen(string2);
size_t size = size1 * (size2 + 1);
char *stringptr = malloc(size + 1);
if (stringptr) {
for (size_t i = 0; i < size; i = i + size2 + 1) {
stringptr[i] = *string1++;
strcpy(stringptr + i + 1, string2);
}
}
return stringptr;
}
int main() {
char string1[] = "chocolate";
char string2[] = "123";
char *string3 = CreateString(string1, string2);
if (string3) {
printf("%s\n", string3);
free(string3);
} else {
printf("cannot allocate memory\n");
}
return 0;
}
char* CreateString(const char* string1,const char* string2)
{
char* buf = NULL;
if(string1 && string2)
{
size_t len1 = strlen(string1);
size_t len2 = strlen(string2);
char* buf= (char*)malloc(len1 +len2 +1);
if(buf){
strcpy(buf,string1);
strcpy(buf+len1, string2);
}
return buf;
}
return NULL;
}