[英]Reverse string array
我正在嘗試反轉字符數組並將其放置在新數組中。 它似乎沒有返回任何東西。 這是下面的代碼,我不知道這是錯誤的。 有指針嗎? (無雙關語)
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);
}
錯誤:
正如@Bill所說,j ++在getReverse()循環中執行兩次。
getReverse()中的putchar(j)會導致輸出混亂,因為j很小,它們可能是無法打印的字符。 如果您確實想監視j的值,請使用printf(“%d \\ n”,j);
如@jarmod所說,您在src []中錯過了'\\ 0'。 您應該添加“ src [count] ='\\ 0';” 在while()循環之后和main()中的getReverse()之前。
此外,如果* src和* dest指向相同的地址,則getReverse()無法工作。盡管您已經聲明函數“反轉字符數組並將其放置在新數組中”,但是當您使用該函數時,請考慮一下寫一個更通用的功能。
我只是修改一些代碼並運行它。 代碼如下
#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';
}
這可能是問題所在。
#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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.