【问题标题】:The compiler complains with "Error: stray '\240' in program"编译器抱怨“错误:程序中的流浪'\ 240'”
【发布时间】:2015-06-01 10:18:55
【问题描述】:

希望我实现以下功能:

void calc ( double* a, double* b, int r, int c, double (*f) (double) )

参数a、r、c和f是输入,b是输出。 “a”和“b”是具有“r”行和“c”行的二维矩阵 列。 “f”是一个函数指针,可以指向以下类型的任何函数:

double function‐name ( double x ) {
    …
}

函数calc将矩阵a中的每个元素,即aij,转换为矩阵b中的bij=f(aij)。


我实现calc函数如下,放到程序中测试一下:

#include <stdlib.h>
#include <iostream>

using namespace std;

double f1(double x){
    return x * 1.7;
}

void calc (double* a, double* b, int r, int c, double (*f) (double))
{
    double input;
    double output;

    for(int i=0; i<r*c; i++)
    {
        input = a[i];
        output = (*f)(input);
        b[i] = output;
    }
}

int main()
{
    // Input array:
    int r=3;
    int c=4;
    double* a = new double[r*c];
    double* b = new double[r*c];

    // Fill "a" with test data
    //...

    for (int i=0; i<r*c; i++)
    {
        a[i] = i;
    }

    // Transform  a to b
    calc(a, b, r, c, f1);

    // Print to test if the results are OK
    //...

    for (int i=0; i<r*c; i++)
    {
        b[i] = i;
    }

    return 0;
}

问题是,我无法编译它。这是我点击编译并执行按钮时DevC++的输出:

怎么了?

感谢您提出任何意见,以提高实施效率。

【问题讨论】:

  • \240 是 iso8859-1 编码中的不间断空格,所以神秘的是那些非常特殊的字符是如何进入那里的。代码是用 Word 还是什么写的?
  • @Wintermute hehe 我实际上仔细检查了 OP 与 person I met 16m ago 不一样 :)
  • 代码对我来说编译得很好(g++ -o test.exe test.cpp),没有任何改动。你在 10 号线附近检查了吗?
  • 你永远不会清理你分配的内存(提示:查看std::vector 以替换那些裸指针)。除此之外它看起来还不错。 @sehe 呵呵。就在几天前,我看到了另一个带有完全相同 Unicode 引号的问题。这让我感到疑惑。我的意思是,在任何像样的 IDE 中都很难偶然获得这些字符。
  • 从 Adob​​e Acrobat 和 Adob​​e Reader 复制和粘贴也会导致该错误。 Sublime Text 可能有助于消除这些不需要的字符。

标签: c++ arrays function pointers matrix


【解决方案1】:

正如之前的回复中提到的,这通常在编译复制粘贴代码时出现。如果您有 Bash shell,则以下命令通常有效:

iconv -f utf-8 -t ascii//translit input.c > output.c

【讨论】:

    【解决方案2】:

    您的源代码中似乎包含非法字符。我不知道 \240 应该是什么字符,但显然它在第 10 行的开头

    在您发布的代码中,问题不存在:Live On Coliru

    【讨论】:

    • 你是对的。我重写了第 10 行(错误所指的行)并解决了问题。谢谢。顺便说一句,实现是否正确?(如它所愿)
    • 很想说“我不知道。它想要有多正确?”。看看
    • 看起来不错,但相当笨拙且容易出错,我至少更喜欢this (live demo),甚至更好c++ style,甚至why use a target vector
    • 非法字符可能是 Unicode NO-BREAK SPACE 字符,编码为“\302\240”(八进制)。网页上一直使用不间断空格,尤其是当代码等内容不应该被浏览器换行时。
    • 它可能是只是 240 八进制,0xA0 - CE/CP-1250's 'NBSP'。
    【解决方案3】:

    /240 错误是由于每行代码前有非法空格。

    例如。

    printf("任何东西");

    而不是

     printf("任何东西");

    在 IDE 中复制粘贴代码时,此错误很常见。

    【讨论】:

      【解决方案4】:

      您的程序中有无效/不可见的字符。

      当您从其他网站或有时是文档复制和粘贴代码时,您很可能会拾取这些不可见字符。将网站上的代码复制到另一个文本文档中,然后复制并粘贴到您的代码编辑器中可能会奏效,但根据您的代码的长度,您应该逐字逐句输入。

      【讨论】:

        【解决方案5】:

        当我刚刚复制完整行时遇到了同样的错误,但是当我再次重写代码时,即完全写入而不是复制粘贴,然后错误不再存在。

        结论:复制的语言可能有一些不可接受的单词导致此错误。

        【讨论】:

          【解决方案6】:

          由于我的整个代码中存在非法空格,我遇到了同样的问题。

          我通过选择其中一个空格并使用find and replace 将所有匹配项替换为常规空格来修复它。

          【讨论】:

            【解决方案7】:

            解决方案:删除该行代码(如果您是从另一个源文档中复制的)并自己输入。

            Error:stray '\240' in program只是一个字符编码错误信息。

            根据我的经验,这只是字符编码的问题。例如,如果您从网页复制一段代码,或者您先在文本编辑器中编写它,然后再将其复制并粘贴到 IDE 中,则它可能带有源文档或编辑器的字符编码。

            【讨论】:

              猜你喜欢
              • 2013-10-09
              • 2011-01-08
              • 2018-05-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-07-10
              • 1970-01-01
              相关资源
              最近更新 更多