首先,我同意其他人std::string
在绝大多数情况下使用 a 而不是字符数组。帮助链接在这里:C++ 字符串库
现在也直接回答您的问题:
*lab="\0";
*mne="\0";
and so on.....
这是错误的。假设您的编译器没有给您错误,您没有将“空终止符”分配给这些数组,而是尝试将"\0"
字符串所在位置的指针值分配给 char* 所在的前几个内存位置指向!请记住,您的变量是指针,而不是字符串。如果您试图在开头放置一个空字符,以便strlen
或其他 C 字符串函数看到一个“空”字符串,请执行以下操作:*lab='\0';
不同之处在于,单引号表示字符\0
,而双引号,它是一个字符串文字,它返回一个指向第一个元素的指针。我希望这是有道理的。
现在对于您的第二个,您不能只是像那样“分配”给 C 风格的字符串。您需要将每个字符放入数组并正确终止它。通常最简单的方法是sprintf
:
sprintf(lab, "%s", "mystring");
这可能没有多大意义,特别是因为我没有取消引用指针,但我会引导你完成它。第一个参数对 sprintf 说“将你的字符输出到这个指针指向的地方”。所以它需要原始指针。第二个是格式字符串,如printf
使用。所以我告诉它使用第一个参数作为字符串。第三个是我想要的,一个指向另一个字符串的指针。这个例子也适用sprintf(lab, "mystring")
。
如果您想了解 C 风格的字符串处理,您需要阅读一些示例。恐怕我什至不知道在网上哪里可以找到这方面的好例子,但我祝你好运。我强烈建议您查看 C++ 字符串库以及basic_string<>
那里的类型。这就是你应该使用的 std::string 的类型定义。