2017-02-23 1 views
1

Ich habe diese Funktion add_to_string genannt und ich nenne es aus meiner Hauptfunktion ein Zeichen in einen Stringein Zeichen in eine Zeichenfolge in c

add_to_string(name[I]); 

scheint es mir, hinzufügen, dass ich nicht ein Zeichen anhängen kann in ein Faden. Wie würde ich dieses Problem angehen?

mein Hauptziel in diesem Code ist einfach den eingegebenen Namen Initialen zu drucken und den Benutzer falschen Eintrag (Hinzufügen von zwei Leerzeichen zwischen Vor- und Mittelnamen) vermeiden

hier ist mein vollständiger Code

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

string add_to_string (char letter); 
string result; 

int main (void) 
{ 
    printf("pleas enter your full name: "); 
    string name = get_string(); 
    int len = strlen(name); 
    for (int i = 0; i < len; i++) 
     { 
      if (i == 0) 
      { 
       add_to_string(name[i]); 
      } else if (name[i] == ' ') 
      { 
       if (name[i + 1] != ' ') 
       { 
       add_to_string(name[i]); 
       } 
      } 
    } 

    printf("%s\n",result); 
} 

string add_to_string (char letter) 
{ 

    strncat(result, letter, 30); 
    return result; 
} 
+2

Compile mit allen Warnungen aktiviert ... Sie haben mehrere mißbraucht und geben Fehler, die jeder anständige Compiler sofort Highlight wird. – StoryTeller

+0

Ich verstehe nicht wirklich, was Sie meinten, aber ich nehme an, Sie meinen die Zeichenfolge und get_string(), das ist eine Klasse nimmt und sie uns mit diesem cs50-Header, die diese Typen und Funktionen enthalten –

+1

z. [man strncat] (https://linux.die.net/man/3/strncat): 'char * strncat (char * Ziel, const char * src, size_t n);'. Was ist der Typ des zweiten Param und was ist der Typ, den du ihm gegeben hast? – kaylum

Antwort

0

ich bin nicht sicher, welche string hier ist, aber ich nehme an, es ein typedef für char* ist

Ihre Funktion

string add_to_string (char letter) 
{ 
    strncat(result, letter, 30); 
    return result; 
} 

ist in mehrfacher Hinsicht falsch,

ersten result eine globale Variable ist so ursprünglich es auf NULL zeigt.

müssen Sie Speicherplatz für Ihre Zeichenfolge zuzuweisen und result Punkt zu diesem Speicher oder erklären result als Array

char result[128]; // assuming here it is still global otherwise initialize 

Die Funktion add_to_string fügt ein Zeichen der Zeichenfolge lassen, aber sie rufen strncat, die als zwei Strings erwartet Argumente plus eine Größe.

anhängen Statt den Charakter wie diese

size_t len = strlen(result) 
result[ len++ ] = letter; 
result[ len ] = '\0'; 

Dies hält result ein String

Verwandte Themen