我编写了以下程序,用 %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/