我遇到了问题,我无法弄明白为什么。在主要我创建2个字符串数组。该函数接受2个字符串并根据以下要求创建适当大小的新数组:例如:数组1:aviv,数组2:12,新数组:a12v12i12v新数组必须完全相同!然后将新阵列发送到main和main以进行打印。我也打印垃圾值。我检查了新数组的大小,它的大小合适。我的代码:
char* CreateString(char* str1, char* str2)
{
int length1, length2, length3 = 0;
int i,j, index_help = 0;
char *str3 = NULL;
length1 = strlen(str1);
length2 = strlen(str2);
for (i = 0; i < length1; i++) // Check the size of the new array
{
length3++;
if (i == (length1 - 1))
{
break;
}
for (j = 0; j < length2; j++)
{
length3++;
}
}
str3 = (char*)malloc(length3+1 * sizeof(char));
if (str3 == NULL)
{
printf("There is not enough memory space\n");
return 0;
}
for (i = 0; i < length1; i++) //Copying data
{
str3[index_help] = str1[i];
if (i == (length1 - 1))
{
break;
}
for (j = 0; j < length2; j++)
{
index_help++;
str3[index_help] = str2[j];
}
index_help++;
}
return str3;
}
int main()
{
char *str1 = NULL, *str2 = NULL,*str4=NULL;
int size1, size2,i;
printf("enter the size of string number 1:\n");
scanf("%d", &size1);
printf("enter the size of string number2 :\n");
scanf("%d", &size2);
str1 = (char*)malloc((size1 + 1) * sizeof(char));
if (str1 == NULL)
{
printf("There is not enough memory space\n");
return 0;
}
str2 = (char*)malloc((size2 + 1) * sizeof(char));
if (str2 == NULL)
{
printf("There is not enough memory space\n");
return 0;
}
printf("Enter a value for the first string (the size is:%d):\n", size1);
scanf("%s", str1);
printf("Enter a value for the second string (the size is:%d):\n", size2);
scanf("%s", str2);
str4 = CreateString(str1, str2);
printf("%s",str4);
printf("\n");
return 0;
}
该函数应该声明为
char* CreateString( const char* str1, const char* str2);
因为在函数中没有更改字符串str1
和字符串str2
。
您必须使用终止零附加结果字符串。
在不使用循环的情况下,可以更简单地计算结果字符串的长度。
由于函数strlen
具有返回类型size_t
,因此接受函数调用结果的变量也应该声明为具有类型size_t
而不是类型int
。
该功能可以按照以下方式实施,如示范程序中所示。
#include <stdio.h>
#include <string.h>
char * CreateString(const char *s1, const char *s2)
{
size_t n1 = strlen(s1);
size_t n2 = strlen(s2);
size_t n3 = n1 == 0 ? 0 : n1 + (n1 - 1) * n2;
char *s3 = ( char * )malloc(n3 + 1);
if (s3)
{
if (n2 == 0)
{
strcpy(s3, s1);
}
else
{
char *p = s3;
while (*s1)
{
*p++ = *s1++;
if (*s1)
{
strcpy(p, s2);
p += n2;
}
}
*p = '\0';
}
}
return s3;
}
int main( void )
{
char *p = CreateString("aviv", "12");
printf("\"%s\"\n", p);
free(p);
p = CreateString("", "12");
printf("\"%s\"\n", p);
free(p);
p = CreateString("a", "12");
printf("\"%s\"\n", p);
free(p);
p = CreateString("av", "12");
printf("\"%s\"\n", p);
free(p);
p = CreateString("av", "");
printf("\"%s\"\n", p);
free(p);
return 0;
}
程序输出是
"a12v12i12v"
""
"a"
"a12v"
"av"