C 反向字符串数组
我正在尝试反转一个字符数组,并将其放置在一个新数组中。它似乎没有返回任何东西。这是下面的代码,我不知道是什么错了。有什么建议吗?(没有双关语)C 反向字符串数组,c,arrays,string,C,Arrays,String,我正在尝试反转一个字符数组,并将其放置在一个新数组中。它似乎没有返回任何东西。这是下面的代码,我不知道是什么错了。有什么建议吗?(没有双关语) void getReverse(char dest[],char src[] { int i; int j=0; int length=strlen(src); printf(“%d\n”,长度); 对于(i=length-1;i>=0;i--,j++) //对于(j=0;jbugs: 正如@Bill所说,j++在getReverse()的循环中执行两次
void getReverse(char dest[],char src[]
{
int i;
int j=0;
int length=strlen(src);
printf(“%d\n”,长度);
对于(i=length-1;i>=0;i--,j++)
//对于(j=0;jbugs:
正如@Bill所说,j++在getReverse()的循环中执行两次
getReverse()中的putchar(j)将导致输出混乱,因为j非常小,它们可能是不可打印的字符。如果确实要监视j的值,请使用printf(“%d\n”,j)
正如@jarmod所说,您在src[]中缺少一个“\0”。您应该在while()循环之后和main()中的getReverse()之前添加“src[count]=”\0“;”
<> P>另外,如果*Src和*DEST指向同一个地址,您的GETRESSER()不能工作。ALTHOGH您已经声明了函数“反转一个字符数组并把它放在一个新的数组中”,但是在编写一个更常见的函数时要考虑这一点。 Bug:
正如@Bill所说,j++在getReverse()的循环中执行两次
getReverse()中的putchar(j)将导致输出混乱,因为j非常小,它们可能是不可打印的字符。如果确实要监视j的值,请使用printf(“%d\n”,j)
正如@jarmod所说,您在src[]中缺少一个“\0”。您应该在while()循环之后和main()中的getReverse()之前添加“src[count]=”\0“;”
<> P>另外,如果*Src和*DeST指向同一个地址,您的GETRESSER()不能工作。ALTHOGH您已经声明了函数“反转一个字符数组并把它放在一个新的数组中”,但是在编写一个更常见的函数时要考虑这个问题。 < P>我只是修改了一些代码并运行它。
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#define MAX_SIZE 30
void getReverse(char dest[], char src[])
{
int i;
int j=0;
int length = strlen(src);
printf("%d\n", length);
for(i=length-1; i>=0; i--, j++)
//for(j=0; j<length; j++)
{
dest[j]=src[i];
//putchar(j);
//j++;
}
dest[j] = '\0';
}
main()
{
char dest[MAX_SIZE];
char src[MAX_SIZE];
int i = 0;
int count;
int c = getchar();
count = 0;
memset(src, 0, MAX_SIZE);
while ((count < MAX_SIZE - 1) && c != EOF)
{
src[count] = c;
++count;
//putchar(c);
c = getchar();
}
printf("src=%s\n", src);
getReverse(dest, src);
printf("dest=%s\n", dest);
}
abcdefghijk
src=abcdefghijk
11
dest=kjihgfedcba
我只是修改一些代码并运行它
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#define MAX_SIZE 30
void getReverse(char dest[], char src[])
{
int i;
int j=0;
int length = strlen(src);
printf("%d\n", length);
for(i=length-1; i>=0; i--, j++)
//for(j=0; j<length; j++)
{
dest[j]=src[i];
//putchar(j);
//j++;
}
dest[j] = '\0';
}
main()
{
char dest[MAX_SIZE];
char src[MAX_SIZE];
int i = 0;
int count;
int c = getchar();
count = 0;
memset(src, 0, MAX_SIZE);
while ((count < MAX_SIZE - 1) && c != EOF)
{
src[count] = c;
++count;
//putchar(c);
c = getchar();
}
printf("src=%s\n", src);
getReverse(dest, src);
printf("dest=%s\n", dest);
}
abcdefghijk
src=abcdefghijk
11
dest=kjihgfedcba
这里j的值增加了两倍
for(i=length-1; i>=0; i--, **j++**)
//for(j=0; j<length; j++)
{
dest[j]=src[i];
putchar(j);
**j++**;
}
dest[j] = '\0';
}
for(i=length-1;i>=0;i--,**j++**)
//对于(j=0;j这里j的值增加了两倍
for(i=length-1; i>=0; i--, **j++**)
//for(j=0; j<length; j++)
{
dest[j]=src[i];
putchar(j);
**j++**;
}
dest[j] = '\0';
}
for(i=length-1;i>=0;i--,**j++**)
//对于(j=0;j#包括
#包括
void getReverse(char dest[],char src[]
{
int i;
int j=0;
int length=strlen(src);
printf(“%d\n”,长度);
对于(i=length-1;i>=0;i--,j++)
//对于(j=0;j&&
如果(c=='\n'){
src[count]='\0';
打破
}
src[count]=c;
++计数;
//普查尔(c);
c=getchar();
}
getReverse(目的地、src);
printf(“%s”,dest);
返回0;
}
#包括
#包括
void getReverse(char dest[],char src[]
{
int i;
int j=0;
int length=strlen(src);
printf(“%d\n”,长度);
对于(i=length-1;i>=0;i--,j++)
//对于(j=0;j&&
如果(c=='\n'){
src[count]='\0';
打破
}
src[count]=c;
++计数;
//普查尔(c);
c=getchar();
}
getReverse(目的地、src);
printf(“%s”,dest);
返回0;
}
removej++
从循环内部删除,您将它放在for
中,您无法保证src[]以零终止符结尾,因此您的reverse函数调用strlen()将产生不可预测的结果。此外,我会将getReverse()重命名为reverse()或类似的名称,因为该函数没有“获取”任何内容(它不返回值)。从循环内部移除j++
,它就在for
中,因为你没有保证src[]以零终止符结尾,所以你的reverse函数调用strlen()将产生不可预知的结果。另外,我将getReverse()重命名为reverse()或者类似,因为函数不“获取”任何内容(它不返回值)。