2017-03-23 77 views
0

後,陣列沒有修改我在C++中遇到了一些指標問題。我已經編寫了哪個調用函數 - 它的任務是在包含在數組中的c-string之前添加c-string「UWAGA:」(該地址作爲參數發送)。如果該c字符串的長度大於製表符大小,它應該更改'。'上的最後三個符號。標誌。 它試圖打印twsk指針,但它不修改tab []內容。 BTW。在我的功能裏面,當我打印w指示符時,它只顯示主要的c字符串。有人能告訴我爲什麼它不修改我的標籤數組?使用指標

PS。對不起我的英語不好。

#include <iostream> 
 
#include <cstring> 
 

 
using namespace std; 
 

 
char * dopisywacz(char *w, int size); 
 

 
int main() 
 
{ 
 
\t int size = 50; 
 
\t char tab[size] = {"jakis c-string."}; 
 
\t 
 
\t cout << dopisywacz(tab, size) << endl; 
 
\t 
 
} 
 

 
char * dopisywacz(char *w, int size) 
 
{ 
 
\t char *poczatek = w; 
 
\t char str[] = {"UWAGA: "}; 
 
\t int dlugosc = strlen(w); 
 
\t char temp[size]; 
 
\t char *twsk = temp, *tpocz = twsk; 
 
\t 
 
\t int counter = 7; 
 

 
\t 
 
\t for (int i = 0; i < 7; i++) 
 
\t { 
 
\t \t *twsk++ = str[i]; 
 
\t } 
 

 
\t while(*temp) 
 
\t { 
 
\t \t *twsk++ = *w++; 
 
\t \t counter++; 
 
\t \t 
 
\t \t if (counter == size) 
 
\t \t { 
 
\t \t \t *twsk -= 4; 
 
\t \t \t for (int i = 0; i < 3; i++) 
 
\t \t \t { 
 
\t \t \t \t *twsk++ = '.'; \t 
 
\t \t \t } \t 
 
\t \t \t break; 
 
\t \t } \t 
 
\t } \t 
 
\t *twsk = 0; 
 
\t 
 
\t twsk = tpocz; 
 
\t while (*(w) = *(twsk)) 
 
\t { 
 
\t \t w++; 
 
\t \t twsk++; 
 
\t } 
 
\t w = poczatek; 
 

 
\t return w; 
 
}

+0

沒有任何理由,爲什麼你的arent使用'STD :: string'? – user463035818

+0

拉瑪,你能告訴更多你的意思嗎?對不起,我是C++的初學者,我不知道如何使用指標。 – maniekoo

+0

tobi303,我不使用namespace std ::因爲make代碼更容易。這是一個簡短的程序,所以我認爲沒有可能與圖書館名稱爭論。 – maniekoo

回答

0

傳遞數組作爲參考

char * dopisywacz(char*& w, int size); 
+0

安德森,謝謝,這也可能是一個好想法,但是這是從建立利用指針作爲參數的書的excersice。 :) – maniekoo

0

也許你需要複製前回滾指針:

w = poczatek; // Restore pointer to initial position 
while (*(w) = *(twsk)) 
{ 
    w++; 
    twsk++; 
} 

return poczatek; 
+0

謝謝你,亞歷克斯!我忘了將這個指針移回那裏。 – maniekoo

+0

@maniekoo,這將是很好的回答這個問題 – Alex