-2

スペースを %20 に置き換える次のプログラムを作成しました。正常に動作します。ただし、ポインター変数 ptr のガベージ値が出力されますが、malloc が 8 バイトのメモリを割り当てるため、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));
    }

 }  
4

3 に答える 3

0

これがかなり短い文字列で機能すると仮定すると、文字列を 2 回調べるのは少しばかげています。ほとんどの場合と同様に、CPU がメモリよりも価値がある場合は、次のようにします。

char *dst = malloc(3*strlen(src) + 1);
char *result = dst;
while (*src) {
    if (*src == ' ') {
       strcpy(dst, "%20"); dst+=3;
    }
    else *dst++ = *src;
    src++;
}
*dst = 0;
// result is result
于 2013-08-10T07:36:14.260 に答える