我試圖扭轉字符串(而不是單詞本身)的話。我想動態分配2維數組只使用指針(不使用數組語法)。我的程序編譯得很好,但最終只顯示一個單詞作爲輸出,在這裏和那裏都有空格。這是我的代碼。純粹使用指針動態分配2維數組
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void rev(char *x, int n);
int words(char * p);
int main()
{
char *p = (char *)malloc(101*sizeof(char));
fgets(p, 101, stdin);
rev(p, words(p));
free(p);
return 0;
}
void rev(char *x, int n)
{
char **y = (char **)malloc(101*sizeof(char *));
int i = 0;
int *j = (int *)calloc(101, sizeof(int));
*y = (char *)malloc(101*sizeof(char));
while(*x!='\n')
{
if(*x==' ')
{
i++;
*(y+i) = (char *)malloc(101*sizeof(char));
}
else
{
*(*(y+i)+(*(j+i))) = *x;
(*(j+i))++;
}
x++;
}
i++;
int z, q;
for(z=i-1; z>0; z--)
{
for(q=0; q<(*(j+i)); q++)
{
printf("%c", *(*(y+z)+(q)));
}
printf(" ");
}
for(q=0; q<*j; q++)
{
printf("%c", *(*(y)+(q)));
}
printf("\n");
for(q=0; q<i; q++)
{
free(y+i);
}
free(j);
free(y);
}
int words(char * p)
{
int x = 0;
while(*p!='\n')
{
if(*p==' ')
{
x++;
}
p++;
}
return ++x;
}
我想這樣做只使用指針算術。我一直在嘗試過去20個小時,但無法弄清楚。任何人都可以解釋錯誤以及如何糾正錯誤嗎? 輸入 Hello World
輸出
Hello
輸入 This is my input
輸出
This
注:他們說,[你不應該投的malloc'()的結果在'C](HTTP://計算器。 COM /問題/ 605845/DO-I-鑄了對結果的-的malloc)。 – MikeCAT
代碼中沒有2D數組。 'char **'是**不是**二維數組,不能指向一個。指針不是數組,反之亦然。並且不要使用_magic numbers_。 – Olaf
對於(q = 0; q MikeCAT