1

これは、「ABC」が「CBA」を返すように逆の文字列を返すコードですが、この「CBA =²²²²ß♣Y*&s」を返します。なにが問題ですか?

char* inv(char* C)
{
    int lenght = strLenght(C)-1;
    int idx=0;

    char* tempStr = (char*)malloc(lenght+2);
    for (;lenght>=0;lenght--,idx++)
    {
        tempStr[idx] = C[lenght];
    }
    return tempStr;
}
int strLenght(char* str)
{
    int lenght=0;
    while(str[lenght] != '\0')
        lenght++;
    return lenght;
}

int main(int argc, char *argv[])
{
    char* st= "ABC";
    char* sr = inv(st);
    printf("%s",sr);
}
4

3 に答える 3

4

あなたtempStrはnullで終了していません。また、 strlen()はcに統合された関数であり、独自に作成する必要はありません。

于 2013-03-23T16:26:01.833 に答える
1

コメントのように、'\0' がありませんでした、ありがとう。

于 2013-03-23T16:28:43.530 に答える
0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void reverse(char *des, char *src)
{
    int len = strlen(src) + 1;      //strlen() can't calculate the '\0'
    int i, j;
    for (i = 0, j = strlen(src) - 1;
         i < len; i++, j--) {
        des[i] = src[j];
    }
    des[i] = '\0';      //important!!
}
int main(int argc, char *argv[])
{
    char* st= "ABC";
    char  sr[strlen(st) + 1];
    reverse(sr, st);
    printf("%s",sr);
}
于 2013-03-23T16:44:39.467 に答える