2017-02-23 213 views
1

我有這個功能稱爲add_to_string,我把它從我的主要功能爲char添加到字符串在C字符添加到字符串

add_to_string(name[I]); 

在我看來,我不能一個char追加到一個字符串。那麼我將如何解決這個問題呢?

我在此代碼的主要意圖是簡單地打印輸入的名稱縮寫,避免用戶輸入錯誤(加名和中間名之間有兩個空格)

這裏是我的全部代碼

#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

編譯啓用所有警告......你有幾個誤用,並鍵入任何像樣的編譯器將突出馬上錯誤。 – StoryTeller

+0

我並沒有真正明白你的意思,但我想你的意思是字符串和get_string(),這是一個正在採用的課程,他們爲我們提供了這個包含這些類型和功能的cs50標題,例如 –

+1

。 [man strncat](https://linux.die.net/man/3/strncat):'char * strncat(char * dest,const char * src,size_t n);'。第二個參數的類型是什麼,你給它的類型是什麼? – kaylum

回答

0

我不知道什麼是string這裏,但我認爲它是char*

你的功能一個typedef

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

是錯在幾個方面,

第一result是一個全局變量,所以最初它指向NULL。

您需要爲您的字符串分配存儲空間,讓result點到存儲或聲明result作爲數組

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

功能add_to_string增加一個字符字符串,但你叫strncat這需要兩個字符串作爲參數加上大小。

而是追加字符這樣

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

這使result字符串