2012-04-14 58 views
0

從我的理解cin.getLine獲取第一個字符(我認爲它是一個指針),然後獲取該長度。我在char的時候使用過它。我有一個函數返回一個指向數組中第一個字符的指針。是否有一個等同於將數組的其餘部分轉換爲可以使用整個數組的字符。我在下面解釋我正在嘗試做什麼。該功能工作正常,但如果它可以幫助我可以發佈該功能。cin.getline()等同於從函數中獲取字符時。

cmd_str[0]=infile();// get the pointer from a function 
cout<<"pp1>"; 
cout<< "test1"<<endl; 
// cin.getline(cmd_str,500);something like this with the array from the function             
cout<<cmd_str<<endl; this would print out the entire array 
cout<<"test2"<<endl; 
length=0; 
length= shell(cmd_str);// so I could pass it to this function 
+2

第一個字符不是指針。沒有字符是一個指針。請張貼其餘的代碼,以便我們可以真正運行它。也請描述什麼是錯誤的和/或你希望完成什麼。 – Potatoswatter 2012-04-14 23:30:44

+0

這是非常不清楚你想要做什麼或你問什麼。 getline最多可以讀取n-1個字符,或直到遇到新行。它不會告訴你它實際讀取了多少個字符。 – deong 2012-04-14 23:31:44

回答

0

首先,如果cmd_strcharinfile數組返回一個指向一個字符串,第一項任務會給你一個錯誤。它試圖分配一個指向單個字符的指針。

你似乎要的是strncpy

strncpy(cmd_str, infile() ARRAY_LENGTH - 1); 
cmd_str[ARRAY_LENGTH - 1] = '\0'; 

我一定要一個字符串結束添加到數組,因爲如果strncpy複製所有ARRAY_LENGTH - 1字符,它會追加終止。

如果cmd_str是正確的陣列(即聲明如下char cmd_str[ARRAY_LENGTH];),那麼你可以在我的例子中使用sizeof(cmd_str) - 1代替ARRAY_LENGTH - 1。但是,如果cmd_str作爲指向函數的指針傳遞,則此操作將不起作用。

+0

是否使用'MAGIC_NUMBER'代碼和不安全的C字符串處理函數? – Puppy 2012-04-14 23:35:02

+0

@DeadMG使用'MAGIC_NUMBER'比使用類似_real_幻數的東西好得多,比如'64'。我還添加了一個可以使用'sizeof'的段落,但僅限於某些情況。我明確地終止了字符串,使複製安全,並解釋原因。 – 2012-04-15 14:35:22

1

你可以使用一個字符串流:

char const * p = get_data(); // assume null-terminated 

std::istringstream iss(std::string(p)); 

for (std::string line; std::getline(iss, line);) 
{ 
    // process "line" 
} 

如果字符數組是不是空終止,但有一個給定大小N,說std::string(p, N)代替。