C 我没有得到此代码的输出(反转字符串)。谁能告诉我为什么?

C 我没有得到此代码的输出(反转字符串)。谁能告诉我为什么?,c,function,reverse,definition,c-strings,C,Function,Reverse,Definition,C Strings,我开始写这个代码来反转字符串。但在输出中,它只要求输入,然后退出。如果有人告诉我这个问题最简单的解决方法,那将是非常有帮助的 char* ptr; //main function { int i; char *OriginalString1,*OriginalString2; OriginalString1=(char*)malloc(100*sizeof(char)); //Input string printf("Enter the st

我开始写这个代码来反转字符串。但在输出中,它只要求输入,然后退出。如果有人告诉我这个问题最简单的解决方法,那将是非常有帮助的

char* ptr;

//main function
{   

    int i;
    char *OriginalString1,*OriginalString2;
    OriginalString1=(char*)malloc(100*sizeof(char));


    //Input string
    printf("Enter the string: ");
    scanf("%s", OriginalString1);
    strcpy(OriginalString2, OriginalString1);
    free(OriginalString1);

    char reversestring[sizeof(OriginalString2)];
    char revstr[sizeof(OriginalString2)];
    Reverse_String(OriginalString2, reversestring);
    for(i=0;ptr!=reversestring-1; i++)
    {
        revstr[i]=*(ptr-1);
        ptr--;
    }
    revstr[i+1]='\0';
    printf("\nThe reverse string is: %s \n", revstr); 


}

//Function to reverse the string

char *Reverse_String(char *OriginalString,char reversestring[])
{

    int i;
    ptr=reversestring;
    for(i=0; *(OriginalString+i) != '\0'; i++)
    {
        *ptr = *(OriginalString+i);
        ptr++;
    }
    *ptr='\0';
    return (char*)ptr;
}   
我希望输入“hi”的输出为“ih”。但是我只给出输入,没有输出

strcpy(OriginalString2, OriginalString1);
没有意义,因为指针
OriginalString2
的值不确定。它没有初始化

这些声明

char reversestring[sizeof(OriginalString2)];
char revstr[sizeof(OriginalString2)];
没有意义,因为使用的是指针的大小,而不是指针指向的字符串的大小

如果编译器支持可变长度数组,则可以编写

char reversestring[strlen(OriginalString2) + 1];
函数
Reverse\u String
使用全局变量
ptr
也是一个坏主意。您可以在函数中定义它

这个循环呢

for(i=0; *(OriginalString+i) != '\0'; i++)
{
    *ptr = *(OriginalString+i);
    ptr++;
}
不按相反顺序复制原始字符串

如演示程序所示,该函数可以按以下方式显示

#include <stdio.h>
#include <string.h>

char * reverse_copy( const char *s1, char *s2 )
{
    size_t n = strlen( s1 );

    size_t i = 0;
    for ( ; i < n; i++)
    {
        s2[i] = s1[n - i - 1];
    }

    s2[i] = '\0';

    return s2;
}

int main(void) 
{
    const char s1[] = "Hello Vijay";
    char s2[sizeof( s1 )];

    reverse_copy( s1, s2 );

    puts( s1 );
    puts( s2 );

    return 0;
}
如果您不想(或不允许)使用标准C函数
strlen
,并且想使用指针,则该函数可以按以下方式查看

#include <stdio.h>

char * reverse_copy( const char *s1, char *s2 )
{
    const char *in = s1;

    while ( *in != '\0' ) ++in;

    char *out = s2;

    while ( in != s1 )
    {
        *out++ = *--in;
    }

    *out = '\0';

    return s2;
}

int main(void) 
{
    const char s1[] = "Hello Vijay";
    char s2[sizeof( s1 )];

    reverse_copy( s1, s2 );

    puts( s1 );
    puts( s2 );

    return 0;
}

您使用malloc&free时出错,在保存原始字符串的缓冲区上调用了free。在使用完OriginalString之前,无法释放它

下面我提供了一种反转字符串的标准方法,但通常会在适当的位置进行反转

// Macros to make reading strings from command line into buffer more safe
#define SCANF_CFORMAT(S) "%" #S "c"
#define CSIZE(S) SCANF_CFORMAT(S)

// Size of input string, excluding NUL terminator
#define BUFSIZE 100

//Function to reverse the string
char *Reverse_String(char *originalString, char *reverseString)
{
    uint32_t i, n=0;

    // Sanity check input and output buffers
    if (!originalString || ! reverseString){ 
        return NULL;
    }

    // Find length of original string -- could have used strlen()
    while (originalString[n] != '\0' && n < BUFSIZE){
        n++;
    }

    reverseString[n+1] = '\0'; // NUL terminate reversed string.

    for(i=0; i < n; i++){
        reverseString[n-i-1] = originalString[i];
    }
}

void main(void)
{
    int i;

    char originalString[BUFSIZE+1];
    char reverseString[BUFSIZE+1];

    // Input string
    printf("Enter the string: ");
    scanf(CSIZE(BUFSIZE), originalString);

    Reverse_String(originalString, reverseString);

    printf("\nThe reverse string is: %s \n", reverseString);
}
//使从命令行读取字符串到缓冲区更安全的宏
#定义扫描格式“%”S“c”
#定义CSIZE扫描格式
//输入字符串的大小,不包括NUL终止符
#定义BUFSIZE 100
//函数来反转字符串
字符*反向字符串(字符*原始字符串,字符*反向字符串)
{
uint32_t i,n=0;
//健全性检查输入和输出缓冲区
如果(!originalString | |!reverseString){
返回NULL;
}
//查找原始字符串的长度--可能使用strlen()
while(originalString[n]!='\0'&&n
您的代码似乎在复制字符串(相当复杂),而不是反转它。在strcpy之前,您还需要malloc()为OriginalString2留出一些空间。因此。。将其设置为“char reversestring[strlen(OriginalString2)*sizeof(char)]”有帮助吗?@Vijay您必须为终止的零字符reversestring[strlen(OriginalString2)+1]保留一个字节;
Hello Vijay
yajiV olleH
// Macros to make reading strings from command line into buffer more safe
#define SCANF_CFORMAT(S) "%" #S "c"
#define CSIZE(S) SCANF_CFORMAT(S)

// Size of input string, excluding NUL terminator
#define BUFSIZE 100

//Function to reverse the string
char *Reverse_String(char *originalString, char *reverseString)
{
    uint32_t i, n=0;

    // Sanity check input and output buffers
    if (!originalString || ! reverseString){ 
        return NULL;
    }

    // Find length of original string -- could have used strlen()
    while (originalString[n] != '\0' && n < BUFSIZE){
        n++;
    }

    reverseString[n+1] = '\0'; // NUL terminate reversed string.

    for(i=0; i < n; i++){
        reverseString[n-i-1] = originalString[i];
    }
}

void main(void)
{
    int i;

    char originalString[BUFSIZE+1];
    char reverseString[BUFSIZE+1];

    // Input string
    printf("Enter the string: ");
    scanf(CSIZE(BUFSIZE), originalString);

    Reverse_String(originalString, reverseString);

    printf("\nThe reverse string is: %s \n", reverseString);
}