Wir haben dieses Programm in der Universität erstellt, das eine Reihe von Zeichen nach Adresse in der Sprache c erstellt. aber das erste Element (char * str) gibt einen seltsamen Raum aus. Ich habe einige Tutorials über Arrays von Zeichen gesehen, bei denen das erste Element das erste Zeichen ist, das wir eingegeben haben.Sprache c char * beginnt mit dem zweiten Element statt zuerst
also warum passiert das? sind ihre Situationen, in denen das passiert? wenn ja, wie kann ich wissen, ob meine string vom ersten oder zweiten element ausgeht, ohne printf jedes mal zu benutzen?
Das ist mein Programm
#include<stdio.h>
#include<stdlib.h>
char* newStr(int n);
int length(char* str);
int main() {
int n,i;
printf("Number of characters \n");
scanf("%d",&n);
char* str = newStr(n);
char* c = malloc(n*sizeof(char)+1);
c=str;
// check that c[0]=' ' and c[n+1]=\0
for(i=0;i<=n+1;i++) printf("*(str+%d) = %c \n",i,*(c+i));
return 0;
}
char* newStr(int n) {
int i;
char* c;
c=malloc(n*sizeof(char)+1);
printf("Enter a word of %d characters \n",n);
for(i=0;i<=n;i++) {scanf("%c",(c+i));}
*(c+n+1)='\0';
return c;
}
int length(char* str) {
int i=0;
while(*(str+i)!='\0'){i++;}
return i-1;
}
und dies ist der Ausgang
Number of characters
5
Enter a word of 5 characters
hello
*(str+0) =
*(str+1) = h
*(str+2) = e
*(str+3) = l
*(str+4) = l
*(str+5) = o
*(str+6) =
The length of your string is 5
es mir jemand in einfachen termes erklären kann, wie ich auf c ganz neu bin. Vielen Dank im Voraus
'scanf ("% d", &n);' nicht Nimm das nachgestellte Newline-Zeichen, das vom nächsten 'scanf' gelesen wird. – kaylum
... nach dem' scanf ("% c", (c + i)); 'eventuell' scanf sein muss ("% c" , (c + i)); 'mit diesem Platz darin, führende Whitespace zu verbrauchen (die meisten anderen Formatspezifikationen machen das automatisch, aber nicht'% c'). 'scanf' ist ohnehin knifflig und wird am besten vermieden. –
Ich lege ein' scanf ("% c", c); 'vor der Schleife fügte dann den Anfangswert von Ich bei 1. Jetzt funktioniert es. danke – user7454975