小编Coa*_*ach的帖子

为什么/何时包含C字符串的终止'\ 0'字符?

我是C的新手,我们需要手动将终止'\ 0'字符添加到字符串时有点困惑.给定此功能来计算字符串长度(为清楚起见):

int stringLength(char string[])
{
    int i = 0;
    while (string[i] != '\0') {
        i++;
}
    return i;
}
Run Code Online (Sandbox Code Playgroud)

它根据空终止字符计算字符串的长度.那么,使用以下情况,'\ 0'字符的作用是什么(如果有的话)?

情况1:

char * stack1 = "stack"; 
printf("WORD %s\n", stack1);
printf("Length %d\n", stringLength(stack1));
Run Code Online (Sandbox Code Playgroud)

打印:

WORD stack
Length 5
Run Code Online (Sandbox Code Playgroud)

案例2:

char stack2[5] = "stack";
printf("WORD %s\n", stack2);
printf("Length %d\n", stringLength(stack2));
Run Code Online (Sandbox Code Playgroud)

打印:

WORD stack???
Length 8
Run Code Online (Sandbox Code Playgroud)

(这些结果每次都有所不同,但永远不正确).

案例3:

char stack3[6] = "stack";
printf("WORD %s\n", stack3);
printf("Length %d\n", stringLength(stack3));
Run Code Online (Sandbox Code Playgroud)

打印:

WORD stack
Length 5
Run Code Online (Sandbox Code Playgroud)

案例4:

char stack4[6] = "stack";
stack4[5] = '\0'; …
Run Code Online (Sandbox Code Playgroud)

c string c-strings null-terminated

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

了解字节交换

我正在试图找到一种方法来为64位整数创建一个小端/大端转换(uint64_t),虽然我在网上找到了很多关于如何做的答案,但没有一个解释到底是怎么回事.例如,要获取整数的第n个字节,我发现了这个响应:

int x = (number >> (8*n)) & 0xff;

即使我理解了位移组件(向右移8n位),我也看不到&和0xff进来的位置,除了&之外它们是什么意思&是一个按位AND运算符.

那么,这种逻辑如何应用于64位整数的big-endian/little-endian字节交换方法?

先感谢您.

c byte endianness

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

标签 统计

c ×2

byte ×1

c-strings ×1

endianness ×1

null-terminated ×1

string ×1