小编Ann*_*inC的帖子

将变量标记为“完成”

C 中是否有语法让编译器知道某个变量已完成,并且此后将不再使用,从而可能释放寄存器?我宁愿不使用函数调用,因为它们很昂贵。

我知道我可以重用一个变量,但这会导致歧义(这个变量是什么意思?)。

例子:

first_byte = somestring[0];
/*[do a couple of operations on first_byte]*/
done_for(first_byte);
second_byte = somestring[1];
Run Code Online (Sandbox Code Playgroud)

我没有将数组+索引直接提供给我的操作的原因是我不确定是否所有编译器都会优化它以使用临时寄存器而不是每次都转换地址。

不,我不能使用像“temp”这样的名字。这是关于读取打包数据结构。

c variables cpu-registers

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

如何用单个值初始化一个大数组?

我正在尝试在 Rust 中实现 Atkin 的筛子。这需要用 初始化一个数组false。互联网上的语法不再有效。

fn main() {
    const limit:usize = 1000000000;
    let mut sieve:[bool; limit] = [false];
}
Run Code Online (Sandbox Code Playgroud)

我希望这会创建一个limit填充大小的数组false,而不是

rustc“期望一个固定大小为 1000000000 个元素的数组,找到一个有 1 个元素的数组”。

rust

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

打开由argv提供的文件名时出现段错误,即使该文件存在于argv中

我做了一些重复的XOR加密器。您可以使用选择的密钥对选择的字符串进行异或运算,然后有选择地将其输出到文件中。

只要使用单个单词(无空格)的字符串和键来运行程序,就不会出现问题。但是,只要字符串或键中有空格,程序就会在该fopen行上出现段错误(即使argv [3]是实际的文件名,我还是用print语句检查了它)。

为什么这样做呢?

#include <stdio.h>
#include <string.h>

int main(int argc, char const *argv[]){
    int file=0;

    switch(argc){
        case 3:
            break;
        case 4:
            file = 1;
            break;
        default:
            printf("Repeating XOR encryption. Usage:\n./xor \"Your string\" \"Your key\" \"Output filename\" (optional last parameter)");
            return 1;
    }

    const char* string = argv[1];
    const char* key = argv[2];

    int keylen = strlen(key);
    int stringlen = strlen(string);

    unsigned char buffer[keylen];

    unsigned char stringbyte;
    unsigned char keybyte;
    unsigned char newbyte;

    for(int i=0; i<stringlen; i++){
        stringbyte …
Run Code Online (Sandbox Code Playgroud)

c fopen segmentation-fault

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

标签 统计

c ×2

cpu-registers ×1

fopen ×1

rust ×1

segmentation-fault ×1

variables ×1