分配取消引用的字符指针真的不可能吗?
Is assigning de-referenced character pointers really impossible?
所以我想我可能已经读到我绝对必须使用 strncpy()
并且通过取消引用分配 char*
是不可能的。我试过了,但遇到了一些麻烦。我做错了吗?或者 strncpy 真的是唯一的方法吗?
我写了一些代码,但发现我的角色没有被保存。
char* characterDestination = new char [ 50 ];
*characterDestination = 'H';
characterDestination++;
cout << "Result: " << characterDestination << endl;
char characterDestination2[ 50 ];
strncpy( characterDestination2, "H", 1 );
cout << "Result: " << characterDestination2 << endl;
输出:
Result:
Result: H
但我希望 H
在这两种情况下都能打印出来。
在第一个示例中,您增加了指针,它现在指向下一个元素,而不是您保存 'H' 的元素。
因此,打印它的 cout
不会打印 'H',但是内存中存在的第一个字符串之后一直到它找到的 \0 的任何字符串。它什么也没打印,只是因为在你的情况下,\0 恰好是下一个字节。
两个数组都是指针,区别在于第一个是动态分配的,第二个是静态的。 characterDestination
和 characterDestination2
都是指针。
建议:忘记所有这些东西,string.h 功能 完全 并使用 std::string。
所以我想我可能已经读到我绝对必须使用 strncpy()
并且通过取消引用分配 char*
是不可能的。我试过了,但遇到了一些麻烦。我做错了吗?或者 strncpy 真的是唯一的方法吗?
我写了一些代码,但发现我的角色没有被保存。
char* characterDestination = new char [ 50 ];
*characterDestination = 'H';
characterDestination++;
cout << "Result: " << characterDestination << endl;
char characterDestination2[ 50 ];
strncpy( characterDestination2, "H", 1 );
cout << "Result: " << characterDestination2 << endl;
输出:
Result:
Result: H
但我希望 H
在这两种情况下都能打印出来。
在第一个示例中,您增加了指针,它现在指向下一个元素,而不是您保存 'H' 的元素。
因此,打印它的 cout
不会打印 'H',但是内存中存在的第一个字符串之后一直到它找到的 \0 的任何字符串。它什么也没打印,只是因为在你的情况下,\0 恰好是下一个字节。
两个数组都是指针,区别在于第一个是动态分配的,第二个是静态的。 characterDestination
和 characterDestination2
都是指针。
建议:忘记所有这些东西,string.h 功能 完全 并使用 std::string。