2011-05-01 108 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