1

我的字符串长度有一个奇怪的错误。我对此很陌生,所以这可能是我错过的基本内容。

我正在尝试编写一个程序,该程序获取一个指向字符数组(即字符串的第一个字符)的指针,并返回一个指向与第一个大小相同的字符串的指针,但字母是相反的。例如,计算机将变为 retupmoC。tacocat 将保持 tacocat :)

这是代码:

char* return_flipped_string(char* stringptr)
{
    int i=0,size_of_string=length_of_string(stringptr);
    char *flipped;
    flipped=(char *)malloc(size_of_string*sizeof(char));
    while(i<size_of_string)
    {
        *(flipped+i)=*(stringptr+size_of_string-1-i);
        i++;
    }
    return flipped;
}

stringptr 是指向原始字符串的指针,翻转的是我要返回的那个。当我打印翻转的字符串时,它显示原始字符串被翻转,然后是难以区分的乱码。由于某种原因,它们的大小不同。

这是我为查找字符串长度而编写的代码(正常工作)

int length_of_string(char* stringptr)
{
    int length=0,i=0;
    while(*(stringptr+i)!='\0')
    {
        length++;
        i++;
    }
    return length;
}
4

4 回答 4

4

您需要在翻转字符串的末尾附加一个空字节 ('\0')。翻转字符串数据缓冲区的长度是输入字符串的长度加上空字符串终止符字节的长度。正是那个空字节告诉字符串在哪里结束。

于 2013-04-23T21:48:21.110 回答
3

你需要 NULL 终止字符串..就像这样..

  while(i<size_of_string)
    {
        *(flipped+i)=*(stringptr+size_of_string-1-i);
        i++;
    }
    flipped[size_of_string]=0;
    return flipped;
于 2013-04-23T21:48:04.957 回答
1

您缺少一个NUL终止字符。您需要分配一个额外的字符并在末尾显式flipped添加一个。'\0'

char* return_flipped_string(char* stringptr)
{
    int i=0,size_of_string=length_of_string(stringptr);
    char *flipped;
    flipped=(char *)malloc((size_of_string + 1)*sizeof(char));
    while(i<size_of_string)
    {
        *(flipped+i)=*(stringptr+size_of_string-1-i);
        i++;
    }
    *(flipped+1) = '\0';
    return flipped;
}

顺便说一句-您知道strlen标准库中的功能吗?您的length_of_string功能复制了它。我不记得是否strrev符合 ANSI/ISO 标准。

于 2013-04-23T21:49:53.283 回答
0

C 中没有字符串这样的东西。C 有字符 ( char) 数组,当它们包含 字符 ( ) 时(按照惯例)被解释为字符串。第一个找到的终止字符串。如果您的数组不包含 a ,那么任何标准字符串函数都将继续读取从您提供的地址开始的缓冲区,直到它们遇到空字节。 NUL'\0'NULNUL

因此,胡言乱语。

于 2013-04-23T21:54:55.457 回答