gpt4 book ai didi

c - 在c程序中用%20替换空格

转载 作者:行者123 更新时间:2023-11-30 20:15:39 25 4
gpt4 key购买 nike

我编写了以下程序,用 %20 替换空格。它工作得很好。但它会为指针变量 ptr 打印一些垃圾值,尽管它可能被限制为 8 个字符,因为 malloc 为其分配了 8 个字节的内存。

谁能告诉我我哪里出错了?或者有什么现成的算法吗?

void replaceSpaces(char *inputStr )
{

char *ptr;
int i,length, spaceCount=0;
int newLength,j;

for (length=0; *(inputStr+length)!='\0';length++ )
{
if (*(inputStr+length)==' ')
{
spaceCount++;
}
}
newLength = length + 2*spaceCount;
ptr = (char *)malloc(newLength*sizeof(char));

for ( i = length-1; i >=0; i--)
{
if (*(inputStr+i)==' ')
{

*(ptr+newLength-1)='0';
*(ptr+ newLength-2)='2';
*(ptr+newLength-3)='%';
newLength = newLength -3;
}
else
{
*(ptr+newLength-1) = *(inputStr+i);
newLength = newLength -1;
}
}
for ( i = 0; *(ptr+i)!='\0'; i++)
{
printf("%c",*(ptr+i));
}

}

最佳答案

要么使用calloc()ptr分配内存,要么在分配后用'\0'终止它。

使用您的代码,ptr 永远不会以 '\0' 终止。

所以要么改变

ptr = (char *)malloc(newLength*sizeof(char));

ptr = calloc(newLength*sizeof(char), sizeof(char));

或者在分配ptr后添加以下行。

ptr[newLength] = '\0';

关于c - 在c程序中用%20替换空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18159122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com