2011-05-01 177 views
0

我已經從autoit中移出來了,現在正在學習C++,並且一些問題還在繼續。關於C++的簡單一般問題

第一個存儲字符輸入。問題是我不知道該文件的那一行有多少個字符(如果您正在讀取一個文件)或者用戶打算輸入多少個字母(在控制檯應用程序中)。

解決此問題的最佳方法是什麼?我聽說過的串類,但我想避免它監守我不知道它是如何工作的,並導致vunerabilities等

其次...

在C語言中,你可以加載的shellcode到內存中,創建一個函數指針,並執行該代碼。 在C++中有沒有這種機制?

第三...

如何解釋通過字符串輸出字符數組迭代??? (char array [3];)編譯器是否跟蹤數組的大小,還是繼續從內存中讀取,直到它達到\ 0的東西?

最後...

如果字符*僅會指向內存中的數據,那麼爲什麼:

的char *標題= 「節目名稱」;

這項工作?存儲在內存中的字符串文字在哪裏?它如何被引用?

非常感謝Thankyou。我非常感謝你的幫助。

-Hyperzap

+2

歡迎來到堆棧溢出!我可以建議你發現,學習,並從一本好書學習嗎?請參閱本網站上的[C++常見問題解答](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)以獲取要學習的優秀書籍列表。 – 2011-05-01 10:46:18

+0

hyperzap,我以爲你在接下來的8周內被禁止使用電腦,然後我在這裏看到你,試圖學習C++。尼斯。 – 2011-05-01 15:06:55

回答

2
  1. 投入你的時間學習std :: string是非常值得的,因爲它爲你處理很多麻煩。如果你不想利用C++中的特性,那麼爲什麼要使用C++和不只是C?
  2. 您可以使用與C相同的代碼。
  3. 是,輸出C風格字符串的iostream輸出直到終止零。再一次,如果你使用std :: string,你不必關心這些細節。
  4. 糾正我,如果我錯了,但我認爲title將存儲在堆棧const char[]

例子:

const char* hello = "Hello\0World"; 
cout << hello; // Prints only "Hello", i.e. up to terminating zero (\0) 

之所以這樣工作的:

const char* hello = "Hello world"; 
cout << hello; 

是因爲hello真的"Hello world\0"; - 換句話說,編譯器插入一個終止零。

請注意std::string沒有任何魔法。它也讀取,直到終止零:

string hello = "Hello\0World\n"; 
cout << hello; // Still only gives "Hello" 
+0

謝謝。但是,如果std :: string在手之前不知道數據的大小,它實際上是如何存儲數據的? – 2011-05-01 10:08:41

+0

'std :: string'在內部跟蹤大小。當用字符串文字初始化時,例如「Hello world」,它只是讀取有多少個字符,直到終止零。 – Lstor 2011-05-01 10:10:43

+0

非常感謝。 – 2011-05-01 10:15:17

0

char* title = "String Literal"作品,因爲編譯器預先分配的存儲位置來存儲您的字符串字面量,因此你再回來的指針,該內存位置。 在C++中,你知道編譯時的大小的數組(例如:char array[3]本身就是一種類型,所以編譯器會記錄大小。但是,如果你不知道大小(即。 char array[]),它只是爲char。但是,你應該用在C++ std::vector(更好的安全性和性能)的指針。 我也不太確定自己的另外兩個問題(不明白他們)

+0

當我做cout << title;其中title是一個char title [] =「WORD」;編譯器如何知道字符串的長度,並將其正確地打印到屏幕上? char在內存中如何表示? – 2011-05-01 09:59:27

+0

第一個問題:基本上我想知道從文件中獲取和存儲數據的最佳方式,因爲我無法獲取數據的長度。 – 2011-05-01 10:01:14

+0

@ user733100:編譯器知道文字的大小,它需要知道它爲對象文件中的文字保留空間。但是'cout <<「Hi」'不是這樣。相反,文字會衰減到第一個元素的「const char *」,並且該指針被傳遞給該函數。文字有一個尾隨的'\ 0'字符,並且實現'<<'運算符的函數保持寫字符直到找到該字符。 – 2011-05-01 11:04:30