2013-10-30 197 views
0

将值复制到char指针时出现此问题。 如果我写复制C++ char指针

char* data = "abcdef"; 
char* d; 

d[0] = data[0]; 
d[1] = data[1]; 
d[2] = data[2]; 
d[3] = data[3]; 
printf("%s ", d); 

输出是abcd 但如果与 一本替换最后一个块循环基本上是等效的,它打印出什么

for(int i = 0; i < 4; i++) { 
    d[i] = data[i]; 
} 

谁能请解释一下是不同的?

+5

既然你已经标记了这个'C++',你可能想要开始研究'std :: string','std :: cout'等。否则,这段代码非常“C”。 – crashmstr

回答

9

两个程序都有undefined behaviour因为你还没有为d分配的内存。他们可以以任何他们喜欢的方式自由行事,包括你描述的方式。

为了解决这个问题:

  1. d分配存储器;
  2. 确保你写了一个NUL终止符到d

P.S.将字符串文字分配给非const变量的方式在C++中不再有效。使用

const char* data = "..."; 
^^^^^ 

P.P.S.由于您已将标记为[c++]的问题,因此应该使用std::string而不是原始C字符串。

+3

对于printf()调用,即使内存已分配,几乎可以肯定会超出范围。 –

+0

@PaulGriffiths:很好,谢谢! – NPE

+0

感谢您的回答,但我已经看到一个类似这样的例子。 char * c =“string one”; c =“另一个字符串”;所以我认为它在旅途中分配内存,用char指针 – patentul