C语言 在汇编(NASM)中,空字符不作为字符串结束符



在c语言中,我们可以使用''空字符作为字符串的结束符。

#include <stdio.h>
int main() {
char msg[] = "helloworld";
printf("msg = %s", msg);
}

这段代码将只打印hello。不是世界。

但是在linux x86 NASM中,我使用以下代码,但它打印的是helloworld.

section .data
msg db "hello", 0, "world"
section .text
global main
main:
mov eax, 4
mov ebx, 1
mov ecx, msg
mov edx, 20
int 0x80
mov eax, 1
mov ebx, 0
int 0x80
ret

为什么空字符不工作在这里作为字符串的结束?我怎么做才能把它组装起来呢?

您使用write系统调用来写入具有您指定的确切大小的数据。write函数不知道它写入的数据,它只是一系列字节。

如果你想写一个以空结尾的字符串,你需要找到终止符的位置,并从这个位置计算长度,或者使用一个知道C以空结尾字符串的函数。

相关内容

  • 没有找到相关文章

最新更新