2015-09-12 80 views
0

我不知道下面的代碼有什麼問題。我沒有找到任何幫助,我細讀了stackoverflow。c複製ptr的第一個字母

char * abbreviate_name(const char * full_name) { 

int length = strlen(full_name) + 1; 
char * final = malloc(length); 
*answer = '\0'; 
char ptr[51]; 

// above is where I declare all my variables 
strncpy(ptr, full_name, length); // copy full_name because it is a const 

// ... 

final = &ptr[1]; // this line copies all of ptr when I do a prinf on it 

我只是想知道如何得到ptr的第一個字母。 我嘗試玩ptrs和地址,並無法使其工作。

+3

full_name'的'的第一個字符是'FULL_NAME [0]'。 – user3386109

+2

什麼是你可以做的答案?答案='\ 0';'?它必須是全局變量,因爲它沒有在函數中聲明。避免使用全局變量 - 或者不要在要調試的代碼中發佈近似值。 –

回答

2

獲取一個指針的第一個字符,你可以去*ptrptr[0]

你的代碼有其他問題,雖然,分配給最終不會複製,它只是指向最後到另一個位置,在這種情況下,你要指向一個堆棧變量,它的要失敗的很慘。

代替,只是strcpy進入決賽,並擺脫「PTR」

1
final[0] = ptr[0]; 
*final = *ptr; 
final[0] = *ptr; 
*final = ptr[0]; 
1

可以,除了基思的答案,通過利用strdup完成一步到位的分配和full_name副本final的:

char *abbreviate_name (const char *full_name) { 

    char *final = strdup (full_name); 

    ... 

strdup將調用malloc動態分配存儲空間足以容納full_name。就像您使用的是malloc一樣,您有責任在不再需要內存時釋放內存。

0

我可能在黑暗中拍攝,並書面答覆這是很容易出現向下票,但讓我開始。

大概OP正在尋找它提供了一個功能和一個字符串的縮略版本,每一個給定的詞的字符串中(full_string),從而第一個字母。原因我認爲這是因爲char *返回類型和函數名稱。

char * abbreviate_name(const char * full_name) ; 

如果我在理解題意正確,那麼你可能尋找

的strtok

,這裏是用於提取片斷,你在找什麼

char *str1, *saveptr1, *token ; 
    for (str1 = full_name; ; str1 = NULL) { 
      token = strtok_r(str1, " " , &saveptr1); // delimited with " " 
      if (token == NULL) { 
        break; // break once no tokens available 
      } 
      printf("%c ", *token); // Extract first letter for each word, which probably form the abbreviated string you are looking for 
    } 
相關問題