关于C++; iFi从AutoIT中移出,现在正在学习C++,一些问题不断出现。

关于C++; iFi从AutoIT中移出,现在正在学习C++,一些问题不断出现。,c++,arrays,char,C++,Arrays,Char,第一种是存储字符输入。问题是,我不知道文件的那一行有多少个字符(如果您正在读取文件),也不知道用户要输入多少个字母(在控制台应用程序中) 解决这个问题的最佳方法是什么??我听说过字符串类,但我想避免它,因为我不知道它是如何工作的,这会导致漏洞等 其次 在C中,您可以将外壳代码加载到内存中,创建函数指针,然后执行该代码。 在C++??中有任何机制吗? 第三 解释器如何迭代字符串输出的字符数组???(char array[3];)编译器是跟踪数组的大小,还是一直从内存中读取,直到找到\0对象 最后

第一种是存储字符输入。问题是,我不知道文件的那一行有多少个字符(如果您正在读取文件),也不知道用户要输入多少个字母(在控制台应用程序中)

解决这个问题的最佳方法是什么??我听说过字符串类,但我想避免它,因为我不知道它是如何工作的,这会导致漏洞等

其次

在C中,您可以将外壳代码加载到内存中,创建函数指针,然后执行该代码。 在C++??

中有任何机制吗? 第三

解释器如何迭代字符串输出的字符数组???(char array[3];)编译器是跟踪数组的大小,还是一直从内存中读取,直到找到\0对象

最后

如果Char*只是指向内存中数据的指针,那么为什么:

char*title=“程序标题”

这工作???存储在内存中的字符串文本在哪里??它是如何被引用的

非常感谢。我非常感谢你的帮助

-Hyperzap之所以有效,是因为编译器预先分配了一个存储字符串文字的内存位置,这样您就可以返回一个指向该内存位置的指针。 在C++中,一个数组,它知道编译时的大小(如在示例中:<代码> char数组[3 ] < /Cord>本身是一种类型,因此编译器会跟踪大小。但是,如果不知道大小(即<代码> char数组[]/COD>),它只是指向char的指针。但是,在C++中,应该使用<代码> STD::vector < /代码>。(更好的安全性和性能)。 我不太确定你的另外两个问题(不太明白)

把你的时间花在学习STD::String是非常值得的,因为它会为你带来很多麻烦。如果你不想利用C++中的特性,那为什么要使用C++而不只是C?
  • 您可以使用与C中相同的代码
  • 是的,C样式字符串的iostream输出直到终止为零为止。同样,如果使用std::string,则不必关心这些细节
  • 如果我错了,请纠正我,但我认为
    title
    将是存储在堆栈上的
    const char[]
  • 例如:

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

    当我问第一个问题时:基本上,我想知道从文件中获取和存储数据的最佳方法,因为我无法获取数据的长度。@user733100:编译器知道文本的大小,它需要知道它以在对象文件中为文本保留空间。但这不是
    cout中所做的。谢谢。但是编译器怎么知道呢std::string在不知道数据大小的情况下实际存储数据???
    std::string
    在内部跟踪数据大小。使用字符串文字初始化时,例如“Hello world”我发现最后一个例子有误导性,因为
    std::string
    是从一个文本构造的,它将一直读取到“\0”,但是一个字符串可以完美地包含内部“\0”:
    const char literal[]=“Hello\0World”;std::string s(literal,literal+sizeof(literal)-1);
    将创建一个包含“Hello\0World”的字符串。它确实有一些魔力,每当需要时,它都会增大大小,避免缓冲区溢出,因此在大多数情况下实际上会更安全。“魔力”是什么这使得它能够增长以适应新的信息?链表?@user733100,这是实现定义的,但是一个实现可以是具有
    char\u类型的数组
    ,并在字符串更改时分配一个更大的数组,以使其
    大小
    大于其
    容量
    。然后它将复制它新的、更大的数组的内容。这不是真正的魔法,它只是比基本数组更高级。欢迎使用Stack Overflow!我可以建议您查找、学习并从一本好书中学习吗?请访问此网站以获取学习的优秀书籍列表。hyperzap,我以为您在接下来的8周内被禁止使用计算机,然后我看到了y在这里,努力学习C++。
    const char* hello = "Hello world";
    cout << hello;
    
    string hello = "Hello\0World\n";
    cout << hello; // Still only gives "Hello"