0

听起来很简单,但我有一个错误,我不确定是什么原因造成的?

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

ra 从来没有得到一个值,我已经验证 npa 在 nopunccount 范围内提供了 char 值。

任何帮助表示赞赏// :)

4

2 回答 2

4

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

于 2010-03-02T09:48:34.873 回答
2

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

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

while (nopunccount <= strlen(npa)) {

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

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

这里同样的问题。

于 2010-03-02T09:46:26.623 回答