2016-05-24 6 views
-3
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

/*functions 
int addHugeNumbers(char *a1,char *a2, char *res); 

*/ 


/* run this program using the console pauser or add your own getch, system("pause") or input loop */ 

int main() { 

    /*variables*/ 
    char str[1001]; 
    int i; 
    /**/ 

    printf("Give the string that contains the numbers that you want to add.\n"); 
    printf("The strings must not contain more than 1000 characters.\n"); 
    scanf(" %s",&str); 
    for(i=0;i<1001;i++){ 
     printf("element is %s",str[i]); 
    } 
    return 0; 
}' 
+0

Entschuldigung für den falschen Beitrag Ich bin neu Ich habe diesen Code und ich möchte jeden Char dieser Zeichenfolge drucken –

+0

Ich kann nicht finden, wo ich falsch bin –

+1

'scanf ("% 1000s ", str); printf (" Element ist "); für (i = 0; str [i]; i ++) { printf ("% c", str [i]); } ' – BLUEPIXY

Antwort

2

mit zu beginnen, lassen Sie mich Ihnen sagen, es gibt keine Array von String in Ihrem Code, dann ist es eine Reihe von char s.

Kommen Sie zu dem Problem, es ist zweifach.

Erstens eine char zu drucken, müssen Sie %c Formatbezeichner verwenden, %s ist für Strings (nullterminierte char Arrays).

Zweitens, in Ihrem Looping-Zustand. Wenn Sie sagen,

for(i=0;i<1001;i++) 

den Index iteriert über all die Elemente des Arrays. Wenn Ihre Eingabe jedoch weniger als 1000 char s ist, bleibt ein Teil des Arrays nicht initialisiert. Der Zugriff auf den nicht initialisierten Variablenwert ruft undefined behavior auf.

Grundsätzlich anstatt über den ganz Array Looping, sollten Sie so etwas wie

int len = strlen(str); 
for(i=0; i<len; i++) 
     printf("element is %c",str[i]); 

tun, die Ihren Index gültige Werte begrenzen.

Das heißt, die scanf() Aussage besser wie

scanf("%1000s",str); //protect from buffer overflow from reallylonginputstring..... 
+0

oooooooooo hhhh vielen Dank ich bin wirklich aufgeregt –

+0

diese Seite ist das beste es kann wirklich helfen Menschen zu verstehen, Programmiersprachen Dank –

1

Charaktere gedruckt mit %c sein sollte, die %s Formatspezifizierer erwartet eine 0-terminierte Zeichenkette.

Sie sollten auch nicht über strlen(str) iterieren, da vielleicht alle Eingaben keine vollen 1000 Zeichen sind.

0

Momentan verursacht Ihre Schleifenbedingung for möglicherweise, dass Sie über nicht definierte Elemente in Ihrem char Array (String) iterieren.

Sie wollen, um Ihre for Schleifenbedingung zu so etwas wie

for (i = 0; i < length; i++) 

wo length als int length = strlen(str); definiert ändern, die die Länge der Saite bis zu, aber nicht einschließlich dem Nullabschlusses sein würden.

Klingt wie Ihre ziemlich neu zu C-Programmierung. Ich würde empfehlen, ein wenig über Strings in C und Buffer Overflows zu lesen, da sie Themen sind, die es zu wissen und vorsichtig zu sein gibt.

Edit: wie in den anderen Antworten erwähnt, sollten Sie %c verwenden, um jedes Zeichen, nicht %s auszudrucken.

+0

Vielen Dank, ich schätze wirklich Ihre Hilfe –