在C输出中反转一个字符串

时间:2013-04-23 21:46:02

标签: c string size puts

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

我正在尝试编写一个程序,该程序获取指向字符数组的指针(IE的第一个字符串),并返回指向与第一个字符串大小相同的字符串的指针,但字母相反。例如,计算机将成为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 个答案:

答案 0 :(得分:4)

您需要在翻转字符串的末尾附加一个空字节(&#39; \ 0&#39;)。翻转的字符串数据缓冲区的长度是空字符串终结符字节的输入字符串加一的长度。它的空字节告诉字符串的结束位置。

答案 1 :(得分:3)

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

  while(i<size_of_string)
    {
        *(flipped+i)=*(stringptr+size_of_string-1-i);
        i++;
    }
    flipped[size_of_string]=0;
    return flipped;

答案 2 :(得分: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;
}

BTW - 你知道标准库中的strlen功能吗?您的length_of_string函数会复制它。我不记得strrev是否在ANSI / ISO标准中。

答案 3 :(得分:0)

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

因此是胡言乱语。