Ich versuche, die Wörter der Zeichenfolge umzukehren (nicht die Wörter selbst). Ich versuche, zweidimensionales Array nur mithilfe von Zeigern dynamisch zuzuweisen (ohne Array-Syntax zu verwenden). Mein Programm kompiliert gut, aber am Ende wird nur ein Wort als Ausgabe mit Leerzeichen hier und da angezeigt. Hier ist mein Code.2-dimensionalen Array mit Zeigern rein logisch zuweisen
#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;
}
Ich möchte es nur mit Zeigerarithmetik tun. Ich habe es seit 20 Stunden probiert und konnte es nicht herausfinden. Kann jemand den Fehler erklären und korrigieren? Eingang Hello World
Ausgang
Hello
Eingang This is my input
Ausgang
This
Hinweis: Sie sagen, [Sie nicht das Ergebnis von 'malloc werfen sollte()' in C] (http: // Stackoverflow. com/questions/605845/do-i-cast-das-Ergebnis-von-malloc). – MikeCAT
Ihr Code enthält kein 2D-Array. 'char **' ist ** nicht ** ein 2D-Array und kann nicht auf eins zeigen. Ein Zeiger ist kein Array oder umgekehrt. Und benutzen Sie keine _magic numbers_. – Olaf
'für (q = 0; q MikeCAT