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

标签 c algorithm

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

相关文章:

c - libcurl消息含义及执行过程

c++ - 如何在 C++ 程序中使用我自己的对象实例

比较 C 中的 SHA 校验和值

arrays - Matlab 中的矢量化范围检查

algorithm - 从运行时间和变化率估计算法的增长顺序

algorithm - 找到包含最多间隔的间隔并输入它们的数量

C 链接列表 - 理解,如何删除列表中的相同元素

宏可以用于对变量的只读访问吗?

c++ - 排序算法中的递归 - 总是不好?

algorithm - 是否可以将代码转换为逻辑图?