在我的字符串中获取垃圾
Getting garbage inside my string
我正在编写一个程序,它接受两个字符串并将一个字符串输入另一个字符串,以便:
字符串 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 string\n");
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("test\n");
return newstr;
}
你每次都在增加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 的 return 值。检查 malloc
的 return 值进行 NULL
检查并适当处理。
同样在乘法时检查是否有溢出。如果发生溢出,请正确处理。
你的问题
您将 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];
}
好的,我发现了问题,我的 for 循环又做了一个 b++,它在我的字符串中创建了一个空单元格。
我正在编写一个程序,它接受两个字符串并将一个字符串输入另一个字符串,以便:
字符串 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 string\n");
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("test\n");
return newstr;
}
你每次都在增加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 的 return 值。检查 malloc
的 return 值进行 NULL
检查并适当处理。
同样在乘法时检查是否有溢出。如果发生溢出,请正确处理。
你的问题
您将 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];
}
好的,我发现了问题,我的 for 循环又做了一个 b++,它在我的字符串中创建了一个空单元格。