Ich schrieb diesen Code in C, um ein Array von Zahlen zu lesen, dann schreiben Sie sie auf dem Bildschirm, aber für einige Werte von n (ex. N = 6), gibt es einen Fehler . Was ist falsch?Ich weiß nicht, was der Fehler ist
#include <stdio.h>
#include <stdlib.h>
int n;
void read(int *a)
{
int i;
for(i=0;i<n;i++) scanf("%d",a+i);
}
void write(int *a)
{
int i;
for(i=0;i<n;i++) printf("%d",*(a+i));
}
int main()
{
int *a;
printf("n=");
scanf("%d",&n);
a=(int *)malloc(n*sizeof(int));
read(&a);
write(&a);
return 0;
}
Wenn Ihr Code nicht ohne Warnungen kompiliert, sagen Sie es. Wenn Ihr Code nicht ohne Warnungen kompiliert wird, nehmen Sie an, dass Sie einen Fehler gemacht haben. Compiler generieren keine Warnungen zum Spaß - oder um Anfänger zu nerven. Sie generieren Warnungen, wenn sie sicher sind, dass der Code, den Sie geschrieben haben, nicht der Code ist, den Sie schreiben wollten. Beachten Sie die Warnungen! Wenn Sie sie nicht verstehen, fragen Sie nach den Warnungen des Compilers. Gib nicht vor, dass dein Code gut ist. (Gibt es irgendeinen Grund, '* (a + i)' über 'a [i]' 'vorzuziehen? Ich kann mir keine guten vorstellen.) –
Auch für zukünftige Referenz ist es bei weitem besser, sowohl die Größe des Arrays (die Anzahl der Elemente in ihm) und das Array zu einer Funktion als auf eine globale Variable für die Größe zu verlassen. Das heißt: 'void lesen (int n, int * a)' und 'void schreiben (int n, int * a)' wäre besser als das, was Sie haben, und Sie sollten globale Variablen im Allgemeinen und solche wie 'vermeiden insbesondere n '. –
(Haftungsausschluss: Nicht _alle_ Warnungen sind die Schuld des Programmierers; sie können auf einen Fehler im Compiler und/oder dessen Unterstützung für den Standard hinweisen oder nur informativ sein. Dies gilt insbesondere für bestimmte Compiler (wie Visual C/C++)) und/oder wenn bestimmte Compiler-Optionen (wie "-Wall") angegeben sind, Beispiele beinhalten GCCs "-Wdouble-promotion" ("warning:' float "implizit auf' double' "hochgestuft) &' -Wimplicit-fallthrough '(" Warnung: 'case" fällt in 'switch' Anweisung"), oder MSVC C4514 ("Warnung: Ich optimierte eine ungenutzte Inline-Funktion out") & C4820 ("Warnung: Ich habe Polsterung hinzugefügt").) –