gpt4 book ai didi

c - 字符串末尾的 "$"标记是否有特殊含义?

转载 作者:行者123 更新时间:2023-12-02 02:21:35 25 4
gpt4 key购买 nike

请引用我在某个c程序中看到的代码:

#define _BUILD_DATE     "2010/05/03$" 
#define _BUILD_TIME "10:46:42$"
#define _BUILD_GUEST "Intel$"
#define _BUILD_BOARD "B0$"
#define _BUILD_CODEVER "2.00$"

const unsigned char SIGN_DATE[] = {_BUILD_DATE};
const unsigned char SIGN_TIME[] = {_BUILD_TIME};
const unsigned char SIGN_GUST[] = {_BUILD_GUEST};
const unsigned char SIGN_PCBV[] = {_BUILD_BOARD};
const unsigned char SIGN_CODEVR[] = {_BUILD_CODEVER};

我很好奇为什么每个字符串末尾总是有一个“$”标记。首先,我想一旦我用“{”和“}”声明了一个字符串,也许我应该遵循这个规则,但下面的测试表明它仍然可以正常工作。

#include <stdio.h>
unsigned char A[] = {"ABC$"};
//unsigned char A[] = {"ABC"};
unsigned char B[] = "123";


int main()
{
int i,j;

for(i=0;i<sizeof(A);i++)
{
if(A[i] == '\0')
printf("null\n");
else
printf("%c\n",A[i]);
}
printf("\n");
for(j=0;j<sizeof(B);j++)
{
if(B[j] == '\0')
printf("null\n");
else
printf("%c\n",B[j]);
}
printf("size of A is %d\n",(int)sizeof(A));
printf("size of B is %d\n",(int)sizeof(B));

return 0;
}

所以我不确定“$”在某些情况下是否有什么特殊含义,或者它只是一个无意义的标记。

感谢您的宝贵时间!

最佳答案

So I'm not sure if there is any special meaning of "$" in some situation, or it is just a meaningless mark.

简短回答

它在 C 中没有特殊含义。在核心语言中没有,并且按照惯例在任何库函数中也没有。相反,库函数将零视为终止符。

长答案

我不能说这在特定代码中是否意味着什么。这是很有可能的。但总的来说,它根本没有什么特殊意义。一个疯狂的猜测是这些字符串在某个地方被用作正则表达式。那么它就有意义了。

但更好的猜测是,这与 DOS 使用美元结尾的字符串有关。在 DOS 中,您可以使用中断 9 打印以 $ 结尾的字符串。您的程序可能有一个依赖于该字符串的打印函数。或者也许有一些工具可以分析依赖于此的可执行文件。

这是一个使用 DOS 中断的 x86 汇编中的 Hello World。

; hello-DOS.asm - single-segment, 16-bit "hello world" program
;
; assemble with "nasm -f bin -o hi.com hello-DOS.asm"

org 0x100 ; .com files always start 256 bytes into the segment

; int 21h is going to want...

mov dx, msg ; the address of or message in dx
mov ah, 9 ; ah=9 - "print string" sub-function
int 0x21 ; call dos services

mov ah, 0x4c ; "terminate program" sub-function
int 0x21 ; call dos services

msg db 'Hello, World!', 0x0d, 0x0a, '$' ; $-terminated message

请注意,0x0d, 0x0a 只是打印换行符。在 DOS(以及 Windows)上,您需要在换行符 (0a) 之前有一个回车符 (0d)。

我在这里找到了代码https://montcs.bloomu.edu/Information/LowLevel/Assembly/hello-asm.html

在 C 语言中,字符串的结尾是零终止符。

关于c - 字符串末尾的 "$"标记是否有特殊含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66332091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com