我正在尝试反转一个字符数组并将其放在一个新数组中。它似乎没有返回任何东西。这是下面的代码,我无法弄清楚是不是错了。有什么指针吗? (没有双关语)
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;
while ((count < MAX_SIZE) || (c != EOF))
{
src[count] = c;
++count;
//putchar(c);
c = getchar();
}
getReverse(dest, src);
printf("%s", dest);
}
答案 0 :(得分:2)
错误:
正如@Bill所说,j ++在getReverse()的循环中执行两次。
getReverse()中的putchar(j)将导致输出混乱,因为j很小,它们可能是不可打印的字符。如果你真的想要监控j的值,请使用printf(“%d \ n”,j);
正如@jarmod所说,你错过了src []中的'\ 0'。你应该添加“src [count] ='\ 0';”在while()循环之后和main()中的getReverse()之前。
另外,如果* src和* dest指向同一个地址,你的getReverse()就无法工作。你已经声明函数“反转一个字符数组并将它放在一个新的数组中”,但考虑一下这是当你写一个更常见的功能时。
答案 1 :(得分:1)
我只修改了一些代码并运行它。代码如下
#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
答案 2 :(得分:0)
这里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';
}
这可能是问题所在。
答案 3 :(得分:0)
#include <stdio.h>
#include <string.h>
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(dest[j]);
//j++;//duplicate , `for` after expression
}
dest[j] = '\0';
}
#define MAX_SIZE 32
int main(void){
char dest[MAX_SIZE];
char src[MAX_SIZE];
//int i = 0;//unused
int count;
int c = getchar();
count = 0;
while ((count < MAX_SIZE) && (c != EOF))//|| -> &&
if(c == '\n'){
src[count] = '\0';
break;
}
src[count] = c;
++count;
//putchar(c);
c = getchar();
}
getReverse(dest, src);
printf("%s", dest);
return 0;
}