使用operator []访问一个函数中的字符串会影响C ++中另一个函数的输出

时间:2015-10-27 02:55:52

标签: c++ gcc cygwin

编译上面的函数时,它什么都不打印。如果我们注释掉" char tmp = num [0]",它会打印" === test ==="

#include <iostream>

using namespace std;

void eval(string num)
{
    char tmp = num[0];
}

int main()
{
    int i;
    cout<<"===test==="<<endl;
    return 0;
}

我知道实施中存在问题。我在Cygwin中测试它,使用以下g ++版本:

$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-cygwin/5.2.0/lto-wrapper.exe
Target: x86_64-pc-cygwin
Configured with: /cygdrive/i/szsz/tmpp/gcc/gcc-5.2.0-1.x86_64/src/gcc-5.2.0/configure --srcdir=/cygdrive/i/szsz/tmpp/gcc/gcc-5.2.0-1.x86_64/src/gcc-5.2.0 --prefix=/usr --exec-prefix=/usr --localstatedir=/var --sysconfdir=/etc --docdir=/usr/share/doc/gcc --htmldir=/usr/share/doc/gcc/html -C --build=x86_64-pc-cygwin --host=x86_64-pc-cygwin --target=x86_64-pc-cygwin --without-libiconv-prefix --without-libintl-prefix --libexecdir=/usr/lib --enable-shared --enable-shared-libgcc --enable-static --enable-version-specific-runtime-libs --enable-bootstrap --enable-__cxa_atexit --with-dwarf2 --with-tune=generic --enable-languages=ada,c,c++,fortran,lto,objc,obj-c++ --enable-graphite --enable-threads=posix --enable-libatomic --enable-libgomp --disable-libitm --enable-libquadmath --enable-libquadmath-support --enable-libssp --enable-libada --enable-libgcj-sublibs --disable-java-awt --disable-symvers --with-ecj-jar=/usr/share/java/ecj.jar --with-gnu-ld --with-gnu-as --with-cloog-include=/usr/include/cloog-isl --without-libiconv-prefix --without-libintl-prefix --with-system-zlib --enable-linker-build-id
Thread model: posix
gcc version 5.2.0 (GCC)

但是在我的Ubuntu 14.04中没有这样的问题。

有人能给我一个解释吗?真的很奇怪。感谢。

===更新:

为什么我这个问题得到-2分?

=== Updates2:===

问题解决了。我们必须安装5.2.0版本的所有相关组件(gcc-core,g ++,libgcc,libsupc,libstdc ++ ....)

1 个答案:

答案 0 :(得分:1)

这个问题是我以前见过的。您会发现有关于切入点的警告。如果无法确定,则链接器默认为 first 函数作为入口点。另请注意,将main()移动到第一个函数并不能解决问题,因为使用不同的参数和不同的调用约定调用入口点。

我不确定你做错了什么,但是如果发布你的编译命令会有所帮助。

g++ -o test.exe test.cpp

是编译它的正确命令;请注意,由于cygwin,我们必须将其作为./test调用(默认情况下,当前目录不是在PATH中)。