听起来很简单,但我有一个错误,我不确定是什么导致它?
nopunccount = 0;
char *ra = new char[sizeof(npa)];
while (nopunccount <= strlen(npa)) {
ra[nopunccount] = npa[strlen(npa) - nopunccount];
nopunccount++;
}
ra永远不会得到一个值,我已经验证了npa在nopunccount范围内提供的char值。
赞赏任何帮助// :)
答案 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];
这里也有同样的问题。