【问题标题】:Assigning char value in one array to char value in another array将一个数组中的 char 值分配给另一个数组中的 char 值
【发布时间】:2010-03-02 09:43:05
【问题描述】:

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

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

ra 从未在其中获取值,我已验证 npa 在 nopunccount 范围内提供 char 值。

感谢任何帮助 // :)

【问题讨论】:

  • 现在是npa 声明了吗? strlen(npa) 是什么?请发布工作代码。
  • char *npa = new char[sizeof(str)]; str 被声明为函数的参数为​​ (char *str)
  • 这是个问题:sizeof(str) 会产生错误的结果(即它会产生指针的大小,而不是字符串的长度!)。
  • 好点,你有什么建议?
  • 在处理字符串时始终使用strlen 而不是sizeof

标签: c++ arrays sizeof strlen


【解决方案1】:

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

【讨论】:

  • Groovy,不知道你不能在字符串中间有一个空值,但这很有意义。谢谢:)
  • 根据定义,以空字符结尾的字符串中间不能有空字符,因为空字符结束字符串...
【解决方案2】:

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

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

while (nopunccount <= strlen(npa)) {

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

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

同样的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多