我正在用JavaScript做一些非常糟糕的事情,我遇到了一个奇怪的问题.
我正在创建填充静态大小的缓冲区的二进制数据.如果内容未填充缓冲区,则余数将填充空字符.
下一步是转换为base64.
大小(字节)并不总是3的倍数,所以我可能需要在末尾添加填充.缓冲区中的最后一个字节始终为空(实际上,它大约是一个kb的空值).
当我在Firefox和Chrome上将其转换为base64时,我会得到ERR_INVALID_URL一个尾随'=',但是当我没有时,它会下载.
例如:
var url = "data:application/octet-stream;base64,";
window.open(url + "AAAA"); // works
window.open(url + "AAAA="); // doesn't work
window.open(url + "icw="); // works
Run Code Online (Sandbox Code Playgroud)
我的文件有效,但它们不符合规范.
这是无效base64的原因吗?更重要的是,这是一个错误还是规范的一部分?
编辑:
我发布了一个答案,给出了Firefox和Chrome之间的一些奇怪之处.有谁知道标准规定了什么?或者它是那些导致碎片的松散规格之一?如果可能的话,我想要一些确定的东西.
我想从以下函数中删除最后一个新行:
void WriteToFile(node *tree)
{
void Write(node*);
fp = fopen("dictionary.txt","w");
if(fp==NULL)
{
printf("Cannot open file for writing data...");
}
else //if(tree==NULL)
{
if(tree!=NULL)
{
Write(tree);
}
fclose(fp);
}
}
void Write(node *tree)
{
if(tree!=NULL)
{
fprintf(fp,"%s:%s\n",tree->word,tree->meaning);
Write(tree->left);
Write(tree->right);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用此函数将文本文件写入BST的内容,我不希望它写入最后一个新行,我该如何删除它?
从手册页:
所述的strcmp()和STRNCMP()函数返回小于整数,等于或大于零,如果S1(或其前n个字节)被发现,分别为小于,以匹配或大于s2 .
实施例中的代码C(打印-15我的机器上,交换TEST1和TEST2反转值):
#include <stdio.h>
#include <string.h>
int main() {
char* test1 = "hello";
char* test2 = "world";
printf("%d\n", strcmp(test1, test2));
}
Run Code Online (Sandbox Code Playgroud)
我发现这个代码(取自这个问题)依赖于strcmp的值不是-1,0和1(它使用返回值qsort).对我来说,这是一种可怕的风格,取决于无证的功能.
我想我有两个相关的问题:
编辑:
离开我的电脑5分钟后,我意识到问题代码实际上没有错误.在阅读评论/答案之前,我找出了我想出的部分,但是我把它留在那里以保持评论的相关性.我认为这仍然是一个有趣的问题,可能会导致习惯于其他语言的程序员总是返回-1,0或1(例如Python似乎这样做,但是没有记录这种方式).
FWIW,我认为依赖记录行为以外的其他东西是不好的风格.
我正在写一个Lua字节码解释器,我正在尝试在LuaJIT和luac之间做出决定来生成初始字节码.因为我正在编写一个解释器,所以我不会得到任何JIT性能,所以这一切都取决于编译器的质量和生成的字节码的设计.
是否要么编译器明显更好?
我在Dart(也是解释)中写这个,所以我们赞赏编译器的任何免费优化.
我正在阅读Go的compress/flate包,我发现了这段奇怪的代码[1]:
n := int32(len(list))
list = list[0 : n+1]
list[n] = maxNode()
Run Code Online (Sandbox Code Playgroud)
在上下文中,list保证指向具有更多数据的数组.这是一个私有函数,因此不能在库外滥用.
对我来说,这似乎是一个可怕的黑客应该是运行时异常.例如,以下D代码生成RangeError:
auto x = [1, 2, 3];
auto y = x[0 .. 2];
y = y[0 .. 3];
Run Code Online (Sandbox Code Playgroud)
使用以下内容可以更简单地(并且看起来更安全)进行滥用切片:
x := []int{1, 2, 3}
y = x[:2]
y = append(y, 4) // x is now [1, 2, 4] because of how append works
Run Code Online (Sandbox Code Playgroud)
但是这两种解决方案看起来都非常骇人和可怕,恕我直言,不应该像他们那样工作.这种事情被认为是惯用的Go代码吗?如果是这样,上面哪一个更惯用?
[1] - http://golang.org/src/pkg/compress/flate/huffman_code.go#L136
有人知道适用于 Windows 的开源 C++ 调试器吗?
它不一定是好的,它只需要工作。(我更喜欢用 C++ 编写的)
谢谢 :)
我正在尝试创建一个while循环,当满足字符串条件或计时器条件时,程序将跳出循环并打印出所需的输出.当打印出所需的输出时,输出将包含比较答案之前和之后的时间差.
但是循环并没有像我期望的那样运行.所以任何人都可以帮我弄清楚这段代码的问题在哪里?
以下是我的代码:
void startGame(time_t cd,int gl){
string guessWord;
time_t start, end, diff,timeLeft;
cout << "Scrambled word is " << randomizeWord(gl) << endl;
while (timeLeft != cd || guessWord.compare(originalWord) == 0)
{
start = time(0);
cout << "You have " << cd << " seconds to guess." << endl;
cout << "Enter guess : ";
cin >> guessWord;
end = time(0);
diff = end - start;
//total_time = total_time + diff;
timeLeft = cd - diff;
if(guessWord.compare(originalWord) != 0)
{ …Run Code Online (Sandbox Code Playgroud) 我有一个函数,其目的是接收一个由空格分隔的数字数组,一次一个数字,将它们分配给结构的变量,如下所示:
typedef struct coo {
int x;
int y;
} Coord;
typedef struct exer {
Coord coords[1000];
} exercise;
int coordinates(char *sent){
char * pal;
int k=0;
pal = strtok (sent," ");
while (pal != NULL)
{
exercise.coords[k].x=*pal;
pal = strtok (NULL," ");
exercise.coords[k].y=*pal;
pal = strtok (NULL," ");
k++;
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)
问题是稍后打印的坐标与发送中给出的坐标不同.
如果我输入坐标1 2 3 4 5 6,它将给出坐标49 50 51 52 53.
先感谢您.
我使用VC++ 2010编译器.我的下面代码给出了509:
double volume = 5.1;
int n = static_cast<unsigned int>(volume * 100.0);
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
谢谢