小编Ger*_*set的帖子

尝试研究它时会消失的bug

这是我用C++编程时遇到过的最奇怪的事情.

这是我的主要文件:

#include <iostream>
#include "lib/utils.h"

using namespace std;

int main(int argc, const char *argv[]) {
    cout << bin2dec(101000010);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是lib/utils.cpp:

#include <iostream>
#include "utils.h"

int bin2dec(int bin) {
    // 101000010
    int dec;
    //std::cout << "";  // If you uncomment this, it works.
    for (int i = 1; bin > 0; i *= 2, bin /= 10) {
        if (bin % 2 == 1) {
            dec += i;
        }
    }
    return dec;
}
Run Code Online (Sandbox Code Playgroud)

程序编译时没有警告,运行时会输出450.450不是十进制的101000010,322是.第一个奇怪的是482和322之间的差异恰好是128.这种情况发生在您尝试转换的任何二进制数字上.但是,什么是真正奇怪的是,当我试图输出值bin和 …

c++ debugging

10
推荐指数
2
解决办法
528
查看次数

在PHP中使用文件和utf8

假设我有一个名为foo.txt的文件,在utf8中编码:

aoeu  
qjkx
ñpyf
Run Code Online (Sandbox Code Playgroud)

我想得到一个数组,其中包含该文件中的所有行(每个索引一行),其中包含字母aoeuñpyf,并且只包含带有这些字母的行.

我编写了以下代码(也编码为utf8):

$allowed_letters=array("a","o","e","u","ñ","p","y","f");

$lines=array();
$f=fopen("foo.txt","r");
while(!feof($f)){
    $line=fgets($f);
    foreach(preg_split("//",$line,-1,PREG_SPLIT_NO_EMPTY) as $letter){
        if(!in_array($letter,$allowed_letters)){
            $line="";
        }
    }
    if($line!=""){
        $lines[]=$line;
    }
}
fclose($f);
Run Code Online (Sandbox Code Playgroud)

然而,在那之后,$lines数组中只有aoeu线.
这似乎是因为不知何故,$allowed_letters"ñ"与foo.txt中的"ñ"不同.
此外,如果我打印文件的"ñ",会出现一个问号,但如果我这样打印print "ñ";,它就会起作用.
我怎样才能使它工作?

php unicode file-io utf-8

8
推荐指数
1
解决办法
3万
查看次数

C:将一个数组传递给一个"动态"的函数

我有一个函数,我想传递一个char*数组,但我不想创建一个变量只是为了这样做,像这样:

char *bar[]={"aa","bb","cc"};
foobar=foo(bar);
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我尝试了这个:

foobar=foo({"aa","bb","cc"});
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我也试过这个:

foobar=foo("aa\0bb\0cc");
Run Code Online (Sandbox Code Playgroud)

它会编译并发出警告,如果我执行该程序,它会冻结.
我尝试过使用星号和&符号,但我无法让它正常工作.

它甚至可能吗?如果是这样,怎么样?

c arrays parameter-passing

5
推荐指数
2
解决办法
2711
查看次数

"幻数"的概念是否会因语言而异?

在C/C++中使用以下代码,例如:

int foo[] = {0, 0, 0, 0};
Run Code Online (Sandbox Code Playgroud)

没有神奇的数字吧?
现在,Python的"等效"将是:

foo = [0, 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)

仍然没有神奇的数字.
但是,在Python中,同样的事情可以写成:

foo = [0] * 4
Run Code Online (Sandbox Code Playgroud)

现在我们有一个神奇的数字.或者我们呢?
我猜这个和其他类似的东西出现在这些和其他语言上.

c c++ python magic-numbers concept

1
推荐指数
2
解决办法
860
查看次数

在滚动窗口中放置绘图区域时,防止滚动条显示

我正在使用Python和pyGTK开发一个项目.我有一个窗口,其唯一目的是显示图像.除非图像太大而不适合屏幕,否则默认情况下窗口不应显示滚动条.
所以我做的是这样的:

window = gtk.Window()
window.resize(image.size[0], image.size[1])

scrolled = gtk.ScrolledWindow()
scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
scrolled.set_shadow_type(gtk.SHADOW_NONE)

area = gtk.DrawingArea()
area.set_size_request(image.size[0], image.size[1])

window.add(scrolled)
scrolled.add_with_viewport(area)
area.show()
scrolled.show()
window.show()
Run Code Online (Sandbox Code Playgroud)

但它不太有效.生成的窗口有点太小,因此滚动条显示出来.
为了工作,我必须将第二行改为:

window.resize(image.size[0] + 2, image.size[1] + 2)
Run Code Online (Sandbox Code Playgroud)

但这很丑陋,并不适用于所有系统.在我的Windows框中,我必须使用+ 3.

我该怎么做才能确保窗口足够大以容纳图像?

python pygtk scrolledwindow

1
推荐指数
1
解决办法
993
查看次数

(Python)为什么我总是要在文件函数中键入绝对路径?

例如,如果我有:
C:\ 42\main.py

C:\ 42\info.txt
,我想从main.py读取info.txt,我必须输入"C:\ 42\info.txt "instad of just"info.txt".

这应该是那样的吗?
如果没有,我该如何解决?

python absolute-path

0
推荐指数
2
解决办法
392
查看次数