我已经从autoit转移,现在正在学习C ++,并且一些问题不断出现。
第一个是存储字符输入。问题是我不知道文件的那一行有多少个字符(如果你正在读取文件)或者用户要键入多少个字母(在控制台应用程序中)。
解决这个问题的最佳方法是什么?我听说过字符串类,但是我想避免它,因为我不知道它是如何工作的,这会导致vunerabilities等。
...其次
在C中,您可以将shellcode加载到内存中,创建函数指针并执行该代码。 在C ++中是否有任何机制???
...第三
解释器如何迭代字符串输出的char数组? (char array [3];)编译器是否跟踪数组的大小,或者只是继续从内存中读取,直到它达到\ 0的东西???
...最后
如果Char *只是指向内存中数据的指针,那么为什么:
char * title =“节目标题”;
这项工作???存储在内存中的字符串文字在哪里?它是如何引用的?
非常感谢你。非常感谢你的帮助。
-Hyperzap
答案 0 :(得分:2)
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"
答案 1 :(得分:0)
char* title = "String Literal"
有效,因为编译器会预先分配一个内存位置来存储字符串文字,因此您可以返回指向此内存位置的指针。
在c ++中,您在编译时知道其大小的数组(如示例中所示:char array[3]
本身就是一个类型,因此编译器会跟踪大小。但是,如果您不知道大小(即char array[]
),它只是一个指向char的指针。但是,你应该在c ++中使用std::vector
(更好的安全性和性能)。
我不太确定你的其他两个问题(不太了解它们)