我有下面的例子,取自这里:
// strings and c-strings
#include <iostream>
#include <cstring>
#include <string>
int main ()
{
std::string str ("Please split this sentence into tokens");
char * cstr = new char [str.length()+1];
std::strcpy (cstr, str.c_str());
// cstr now contains a c-string copy of str
char * p = std::strtok (cstr," ");
while (p!=0)
{
std::cout << p << '\n';
p = strtok(NULL," ");
}
delete[] cstr;
return 0;
}据我所知,str是一个字符串,str.c_str()是一个指向数组第一个元素的指针,该数组的元素包含str字符。然后使用std::strcpy,我们将地址的值作为它的第二个参数,并将这个值赋给作为第一个参数(cstr)的指针。
但是,我有以下取自here的示例
#include <iostream>
#include <cstring>
int main()
{
char *str = new char[100];
std::strcpy(str, "I am string!");
std::cout << str;
delete[] str;
}现在,作为第二个参数,我们有一个字符串(而不是第一个示例中指向数组的指针)。
有人能澄清一下这个矛盾吗?
发布于 2013-04-11 16:01:35
当使用std::strcpy时,我们将给定地址的值作为其第二个参数,并将该值赋给作为第一个参数(cstr)的指针。
char * strcpy ( char * destination, const char * source );没有strcpy真正读取源指向的每个字符并将它们写到目标,它在读取终止空字符时停止。
在第二个示例中,源参数是一个字符串文字,其类型为const char[]。这个字符串可以衰减成一个常量char*,然后传递给strcpy。
字符串文字只不过是指向只读位置的指针。
发布于 2013-04-11 16:00:10
,现在作为第二个参数,我们有一个字符串(而不是第一个例子中指向数组的指针)
在第二个示例中,您有一个C字符串,它是指向以NUL结尾的字符数组的指针。没有不一致的地方。
发布于 2013-04-11 16:03:03
char *strcpy( char *dest, const char *src );需要常量字符的源指针,并将内存复制到类型为字符的目标指针。该函数从source复制字符串长度,直到找到source的以null结尾的字符串。"I am string!"是一个常量char* const`,它是一个字符串文字,主要存储在只读标记内存中。
https://stackoverflow.com/questions/15943514
复制相似问题