在C错误输出中反转字符串

在C错误输出中反转字符串,c,string,size,puts,C,String,Size,Puts,我的琴弦有一个奇怪的虫子。我在这方面还很新,所以这可能是我错过的一些基本的东西 我正在尝试编写一个程序,它获取一个指向字符数组(即字符串的第一个字符)的指针,并返回一个指向与第一个字符串大小相同的字符串的指针,但字母是相反的。例如,计算机将成为retupmoC。Tacocate将保持Tacocate:) 代码如下: char* return_flipped_string(char* stringptr) { int i=0,size_of_string=length_of_string(

我的琴弦有一个奇怪的虫子。我在这方面还很新,所以这可能是我错过的一些基本的东西

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

代码如下:

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;
}

您需要以NULL结尾字符串。。。。就这样

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

while(i您需要NULL终止字符串…就像这样

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

while(i您需要在翻转字符串的末尾追加一个空字节('\0')。翻转字符串数据缓冲区的长度是输入字符串的长度加上一个空字符串终止符字节的长度。

您需要追加一个空字节('\0'))到翻转字符串的结尾。翻转字符串数据缓冲区的长度是输入字符串的长度加上一个空字符串终止符字节的长度。正是这个空字节告诉字符串结束的位置。

您缺少一个
NUL
终止字符。您需要再分配一个字符对于
已翻转
,并在末尾添加一个
'\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;
}
char*return\u fliped\u字符串(char*stringptr)
{
int i=0,字符串的大小=字符串的长度(stringptr);
字符*翻转;
翻转=(字符*)malloc((字符串的大小+1)*sizeof(字符));

而(i您缺少一个
NUL
终止字符。您需要为翻转的
分配一个附加字符,并在末尾添加一个
'\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;
}
char*return\u fliped\u字符串(char*stringptr)
{
int i=0,字符串的大小=字符串的长度(stringptr);
字符*翻转;
翻转=(字符*)malloc((字符串的大小+1)*sizeof(字符));

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


因此就有了乱说。

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


因此就产生了混乱。

提示:
i
length
在长度函数中是相同的,所以最好只使用
i
。您编写字符串的长度而不仅仅是使用标准strlen()函数?@MarcB:正确,我没有注意到。谢谢你的贡献。@NigelHarper:正如我在下面的评论中所说的,strlen得到了一个const char数组,我只想使用指针。@OriaGrober:
strlen
的原型是
size\t strlen(const char*)
所以它肯定需要一个指针。提示:
i
length
在长度函数中是相同的,所以最好只使用
i
。您编写字符串的长度,而不仅仅是使用标准strlen()函数?@MarcB:正确,我没有注意到。谢谢你的贡献。@NigelHarper:正如我在下面的评论中所说的,strlen得到了一个const char数组,我只想使用指针。@OriaGrober:
strlen
的原型是
size\t strlen(const char*)
所以它肯定需要一个指针。我尝试使用strlen,但它作为一个参数接收常量字符。我只想使用指针。所以要么我使用strlen不正确,要么它不适合这里。我希望得到澄清。
strlen
的参数是“指向
常量字符的指针”,所以
strlen("12345678")==8
。您可以用
strlen
替换字符串的
length\u
,只要您包含
。我尝试使用strlen,但它作为参数接收常量字符。我只想使用指针。因此,要么我使用strlen不正确,要么它不适合这里。我希望得到澄清。
str的参数len
是一个“指向
常量字符的指针”,因此
strlen(“12345678”)==8
。只要包含
,就可以用
strlen
替换字符串的
长度。