c-在我的弦中获取垃圾



我正在编写一个程序,该程序需要两个字符串,然后输入一个字符串到另一个字符串中,以便:

  • 字符串1: ABC

  • 字符串2: 123

  • 输出: A123B123C123

现在由于某种原因,我的输出字符串在中间出现垃圾: a123 = b123 = c123 。我不知道为什么,并且会喜欢一些帮助!

这是代码:

#define _CRT_SECURE_NO_WARNINGS
#define N 80
#define ONE 1
#include <stdio.h> 
#include <stdlib.h>
#include <string.h>
void InputStr(char str[]);
char* CreateString(char str1[], char str2[]);
int main()
{
    char strA[N], strB[N], *strF;
    InputStr(strA);
    InputStr(strB);
    strF = CreateString(strA, strB);
    puts(strF);
}
void InputStr(char str[])
{
    printf("Please enter the stringn");
    scanf("%s", str);

}
char* CreateString(char str1[], char str2[])
{
    char* newstr;
    int len1, len2, size, i, j, b;
    len1 = strlen(str1);
    len2 = strlen(str2);
    size = len1*len2;
    newstr = (char*)malloc(size*sizeof(char) + 1);
    for (i = 0, b = 0; i<len1; i++, b++)
    {
        newstr[b] = str1[i];
        b++;
        for (j = 0; j<len2; j++, b++)
            newstr[b] = str2[j];

    }
    newstr[b + ONE] = 0;
    printf("testn");
    return newstr;

}

您的问题

您正在增加b变量2次:

for (i = 0, b = 0; i < len1; i++, b++) // First increment
{
    newstr[b] = str1[i];
    b++; // Second increment
    for (j = 0; j < len2; j++, b++)
        newstr[b] = str2[j];
}

解决方案

只需删除第一个b增量,您的代码将起作用:

for (i = 0, b = 0; i < len1; i++) // No more b increment
{
    newstr[b] = str1[i];
    ++b; // You only need this increment
    for (j = 0; j < len2; j++, b++)
        newstr[b] = str2[j];
}

您每次都在增加b。否则,字符串中有孔。

for (i = 0, b = 0; i<len1; i++)
{
    newstr[b++] = str1[i];
    for (j = 0; j<len2; j++)
        newstr[b++] = str2[j];    
}

那么,一个小的变化将是

newstr[b] = 0;

循环结束后。

也不要施放malloc的返回值。检查malloc检查CC_4的返回值,并适当地处理它。

乘坐时,检查是否有任何溢出。如果溢出正确处理。

好吧,我发现了问题,我的循环又做了一个B ,它在我的字符串中制成了一个空单元。

相关内容

  • 没有找到相关文章

最新更新