2016-05-14 69 views
0

我需要編寫void strncat,它將源的第一個數字字符追加到目標,再加上一個終止空字符。如果源文件中C字符串的長度小於num,則只複製直到終止空字符的內容。我究竟做錯了什麼?strncat函數C++不工作

#include <iostream> 
#include <cstring> 
#include <string> 
using namespace std; 

const int MAXDESTINATION = 40; 
const int MAXSOURCE = 150; 
int main() { 
char dest[MAXDESTINATION + 1] = "It don't mean a thing"; 
char src[MAXSOURCE + 1] = " if it don't got the Go-Go swing!"; 

int a = strlen(dest); 
int b = strlen(src); 
strncat(dest, src, MAXDESTINATION - a) ;} 

void strncat(char destination[], const char source[], int num) { 
if (int strlen(source) < num) { 
    int begin = 0; 
    bool less = false; 
    for (int i = 0; i <num; i++) { 
     if (destination[i] == '\0') { 
      begin = i; 
      less = true; 
     } 
     if (less == true) { 
      destination[begin] = source[i]; 
     } 
    } 
} 
+1

我假設你談論你的編譯器錯誤?因爲你展示的代碼不會構建。如果發佈關於構建錯誤的問題,請始終在問題主體中包含完整和未編輯的構建輸出,並將錯誤所在的代碼行標記爲(例如註釋)。 –

+0

@JoachimPileborg「如果源文件中C字符串的長度小於num,則只複製到達終止空字符的內容」聽起來不像編譯器錯誤 – xaxxon

+0

我不知道'if(int strlen (源) xaxxon

回答

0

我猜測(因爲你還沒有提供甚至完整的strncat的定義)你的問題是你沒有增加開始。這是寫現在的方式,在同一地點是在源每次改寫值[I]

你也許要說

 destination[begin++] = source[i]; 

或者也許你應該只使用i代替,如開始應可能完全跟蹤i,因爲它已初始化爲i,然後每次我都應該增加一次。

此外,從效率的角度來看,您正在多次迭代source。一旦你打電話給strlen(必須通過字符串中的每個字母來計算它們),然後再次在for循環中。你應該看看刪除strlen。

+0

好吧,謝謝,我會嘗試,我會取出整數爲strlen(來源) –

+0

爲什麼這不允許我cout << strncat(dest,src,MAXDESTINATION - a)<< endl; –

+0

你的strncat返回void。你不能打印出一個空白。 – xaxxon

-1

編譯錯誤:

錯誤C1075:文件末尾左括號之前找到 '{' ...

錯誤C4996: 'strncat函數':此函數或變量可能是不安全的。考慮使用strncat_s來代替。

+0

而不是張貼一個答案,點擊你問題底部的編輯按鈕,然後添加它,然後我們需要看到產生這個錯誤的新代碼,並且你不應該命名你的函數strncat - 將它命名爲..「my_strncat」或者其他東西 – xaxxon

+0

對不起,我不知道你的意思,因爲我已經編輯它之前。張貼的是我編輯的代碼,顯示這些編譯錯誤 –