2017-06-02 93 views
-1

我基本上只是採取一個字符串和追加/ concatting與另一個字符串。第一次運行會產生所需的結果,但第二次,第三次等結果似乎是src字符串的兩倍。將事情與jQuery結合起來非常簡單,不知道C中發生了什麼。我應該使用memset嗎?或calloc?我的字符串concatination每次加倍結果,爲什麼?

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

int main(void) { 
    const char* name = "Michelle"; 
    char *ptr; 
    char dest[30]; 
    char yourName[30]; 
    char dots[] = ".."; 
    int i; 

    for (i=0;i<4;i++) 
    { 
    if (strlen(name) > 5) 
    { 
     sprintf(yourName, "%s", name); 
     strncpy(dest, yourName, 3); 
     ptr = strcat(dest, dots); 
     sprintf(yourName, "%s", ptr); 
     printf("%s\n", yourName); 
    } 
    } 

    return 0; 
} 

我期待看到的結果,如

米歇爾變得麥克風.. 這工作,但如果我的名字結構有4名,他們都是米歇爾的結果是...

Mic.. 
Mic.... 
Mic...... 
Mic........ 
+2

您發佈的代碼有語法錯誤。這意味着它不是您嘗試運行的確切代碼。 –

+0

嗯編譯和運行爲我。儘管我按照我的方式輸入了它,但看起來像我錯過了a)。我將編輯缺失的括號。 – user3622460

+1

你想要[this](http://ideone.com/AHz2Oe)。同時使用'sprintf'的'snprintf'。 – BLUEPIXY

回答

1

你沒注意以下警告:

strncpy()功能是類似的,除了最多n字節的src被複制。 警告:如果在src的第一個n字節中沒有空字節,則置於dest中的字符串將不會以空終止。

更換

ptr = strncpy(dest, yourName, 3); 
strcat(dest, dots); 
sprintf(yourName, "%s", ptr); 

ptr = strncpy(dest, yourName, 3); 
dest[3] = '\0'; 
strcat(dest, dots); 
sprintf(yourName, "%s", ptr); 

或只是

yourName[3] = '.'; 
yourName[4] = '.'; 
yourName[5] = '\0'; 
+0

是的,我在PTR的末尾添加了一個帶有strcat的'\ 0'字符,但有人編輯了我的問題,因此您再也看不到了。 – user3622460

+0

感謝您的幫助。 – user3622460

相關問題