2016-04-05 10 views
-1

Ich bin an einem Programm arbeiten, das mich eine neue Nachricht eingeben, fragt und die alten zu ersetzen, aber ich habe zu prüfen, ob die Nachricht länger als die letzten ist. Ich würde gerne eine Antwort bekommen, die meinem Programm ähnlich ist, denn das ist eine Lektion, die ich gerade lerne. Es fordert mich auf, die Größe des neuen Zeichens einzugeben, aber wenn ich es teste, nehme ich meine eingestellte Größe zum Testen.Testing Länge inputed Nachricht mit alter Nachricht

#include <stdio.h> 
#include <stdlib.h> 

void editedMessage(char* nmessage, int size){ 

    char newMessage[]; 
    printf("Enter a new message!\n"); 
    gets_s(newMessage, sizeof(newMessage)); 

    if (size > sizeof(newMessage)){ 
     for (int i = 0; i < sizeof(newMessage); i++){ 
      nmessage[i] = newMessage[i]; 
     } 
    } 
    else { 
     printf("New message is too long.\n\n"); 
    } 

} 

void main(){ 

    char message[] = "This is some message!"; 

    printf("Old message\n%s\n\n", message); 

    editedMessage(message, sizeof(message)); 

    printf("New message\n\n%s\n\n", message); 

} 

EDIT: ich nächste Code bearbeitet, aber jetzt sagt ‚Stapel um die Variable‚message‘wurde beschädigt‘

char newMessage[256]; 
    printf("Enter a new message!\n"); 
    gets_s(newMessage, sizeof(newMessage)); 
    int len = strlen(newMessage); 

    if (size > len){ 
     for (int i = 0; i < sizeof(newMessage); i++){ 
      nmessage[i] = newMessage[i]; 
     } 
    } 
+0

Haben Sie versucht, den Wert dieser 'sizeof (newMessage)' zu drucken, um zu sehen, wie viel Platz Sie haben, um eine andere Nachricht einzugeben? Wenn ja, was sagt Ihnen das über die Definition 'char newMessage [];'? –

+0

Ich muss testen, ob neue Nachricht länger ist oder nicht von der alten Nachricht –

+0

Whoa! Ich verstehe das, aber Sie werden nicht einmal so weit kommen. –

Antwort

1

ich den Rückgabetyp von editedMessage-char* geändert und schneiden Sie es Argumente nach unten.

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

#define MAX_LENGTH 1000 
char* editedMessage(char* oldMessage){ 

    char newMessage[MAX_LENGTH]; 
    printf("Enter a new message : "); 
    fgets(newMessage,MAX_LENGTH,stdin); 

    if (strlen(newMessage)<= strlen(oldMessage)){ 
     strcpy(oldMessage,newMessage); 
    } 
    else { 
     printf("New message is too long.\n\n"); 
    } 
return oldMessage; // In fact the value of oldMessage should have been changed if the new message is shorter in length 
} 

void main(){ 

    char message[MAX_LENGTH] = "This is some message!"; 

    printf("Old message : %s\n", message); 

    editedMessage(message); 

    /* Since we are dealing with pointers, note that I am not catching any 
    * return values here. In essence any changes made to message in the 
    * editedMessage function is automatically effective in the main   
    * function. 
    */ 


    printf("New message :%s\n", message); 

} 
+0

@CoolGuy: diese Änderung gemacht .. – sjsam

+0

Dieser Code funktioniert nicht für mich heißt es: Ausdruck: (L''Puffer ist zu klein' '&& 0). –

+0

Das ist eine schwierige Aufgabe, da "das Problem lokalisieren" oft eine mehrstufige Operation ohne definitive Antwort ist. In diesem Fall Mechanismus der Fehlerverfolgung, dass Sie die am weitesten bekommt ist einfach nur vorsichtig, wenn Sie statische Größe Puffer – sjsam