将一个数组中的char值分配给另一个数组中的char值

时间:2010-03-02 09:43:05

标签: c++ arrays sizeof strlen

听起来很简单,但我有一个错误,我不确定是什么导致它?

nopunccount = 0;
char *ra = new char[sizeof(npa)];
while (nopunccount <= strlen(npa)) {
    ra[nopunccount] = npa[strlen(npa) - nopunccount]; 
    nopunccount++;
}

ra永远不会得到一个值,我已经验证了npa在nopunccount范围内提供的char值。

赞赏任何帮助// :)

2 个答案:

答案 0 :(得分:4)

nopunccount从0开始,因此在循环的第一次迭代中,分配给ra[0]的字符为npa[strlen(npa)]。这是该字符串的终止'\0'。因此,ra中的结果字符串以'\0'开头,因此被认为是通过常用字符串函数在第一个字节处结束。

答案 1 :(得分:2)

npa的声明是什么样的?如果它是一个指针,sizeof(npa)将是指针的大小,而不是分配的大小。如果这些是以零结尾的字符串(也称为“C字符串”),则使用strlen,而不是sizeof。如果这些不是字符串,则需要跟踪在单独变量中分配的数量。

我对此代码有一些其他批评,可能与您的问题无关。

while (nopunccount <= strlen(npa)) {

strlen是O(n)操作。此代码将在每次循环迭代中遍历字符串npa。最好只计算一次长度。

   ra[nopunccount] = npa[strlen(npa) - nopunccount];

这里也有同样的问题。