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