Arrays 正在生成结尾为0的字符串

Arrays 正在生成结尾为0的字符串,arrays,string,assembly,masm,irvine32,Arrays,String,Assembly,Masm,Irvine32,我不能使用此声明,因为selectedWords可以是任何字符串 .DATA guessWords BYTE SIZEOF selectedWords DUP ('-'), 0 所以我试着这样做: ;Wordls what we select by rundom code selectedWords BYTE ? lengthSelectedWorld DWORD ? ;Letter what we guess, input from keyboard guessLetter BYTE

我不能使用此声明,因为selectedWords可以是任何字符串

.DATA
guessWords BYTE SIZEOF selectedWords DUP ('-'), 0  
所以我试着这样做:

;Wordls what we select by rundom code
selectedWords BYTE ?
lengthSelectedWorld DWORD ?

;Letter what we guess, input from keyboard
guessLetter BYTE ?
guessWords BYTE ? 
;Letter what are unknows, change with - 
letterUnknown BYTE "-", 0
我写了这个函数

make_array1 PROC     

    mov  edx,OFFSET selectedWords
    call StrLength
    mov  lengthSelectedWorld,eax
    mov  lengthSelectedWorld1 ,eax
    inc  lengthSelectedWorld

    loop_add_more:
        cmp lengthSelectedWorld, 1 
        je done
        dec lengthSelectedWorld       
        mov eax, '-'
        mov ecx, lengthSelectedWorld1
        mov edi, offset guessWords
        rep stosw

        mov edx, offset guessWords
        call WriteString
        call Crlf ;stampamo enter novi red

        jmp loop_add_more    

    done:
        mov eax, '0'
        mov ecx, lengthSelectedWorld1
        mov edi, offset guessWords
        rep stosw

        mov edx, offset guessWords
        call WriteString
        call Crlf ;stampamo enter novi red

        ret

make_array1 ENDP  
但是在这个函数之后,我得到了猜测词-----的字符串是什么,并且在和上没有0。那么,如何使字符串猜测词=----0

对于我来说,在字符串的末尾有0是很重要的,因为代码中还有其他比较


所选单词字节?
只为所选单词保留一个字节。
猜词字节?
也存在同样的问题。不要像新手一样玩动态分配的内存。而是保留在任何情况下都足够的空间:
猜测字字节50 DUP(?)
。问号表示MASM可以决定将其视为未初始化内存(不存储在.exe文件中,但在程序启动时分配)

STOSW
存储一个单词(=两个字符)。但是,Irvine返回字符串的字节数。改用
STOSB
。在
STOSB
之后,
EDI
指向上次存储的
AL
之后的字符。您可以在那里存储空值。如果要查看,请将0临时更改为“0”

INCLUDE Irvine32.inc

.DATA

;Wordls what we select by rundom code
selectedWords BYTE "WEIGHTLIFTING", 0
lengthSelectedWord DWORD ?

;Letter what we guess, input from keyboard
guessLetter BYTE ?
guessWords BYTE 50 DUP (?)

;Letter what are unknows, change with -
letterUnknown BYTE "-", 0

.CODE

make_array1 PROC

    mov  edx,OFFSET selectedWords
    call StrLength                      ; Irvine32: Length of a null-terminated string pointed to by EDX
    mov  lengthSelectedWord,eax

    loop_add_more:
        mov al, '-'                     ; Default charcter for guessWords
        mov ecx, lengthSelectedWord     ; REP counter
        mov edi, offset guessWords      ; Destination
        rep stosb                       ; Build guessWords
        mov BYTE PTR [edi], 0           ; Store the null termination

        mov edx, offset guessWords
        call WriteString                ; Irvine32: write a string pointed to by EDX
        call Crlf                       ; Irvine32: new line

        ret

make_array1 ENDP

main PROC

    call make_array1
    exit                                ; Irvine32: ExitProcess

main ENDP

END main

你自己把0放在那里?还要注意的是,
stosw
是单词,而不是字节。如果我把stosb放进去,我会得到这样的东西,然后我就不知道如何得到更多的字母了。。那么我想(关于缓冲区…是的,这是汇编语言的故事,你必须自己处理动态大小,语言提供的帮助很少。在hangman游戏中,假设要猜测的单词/句子的最大长度是合理的,例如200…然后简单地为数据segme中的选定和猜测单词分配200Bnt,仅将缓冲区的第一部分用于较短的单词/句子(确保正确清除).对于不同的任务,动态数据可能以千克、兆或千兆为单位,您必须处理动态内存分配。这是200的工作内容。.问题是我使用动态分配的内存玩游戏,得到了一些奇怪的结果。.当我写selectedWords字节“举重”时,0都凑到了一起。@SakaSerbia:很好。现在图片-我不想失去我那只会下金蛋的鹅(向上投票,接受):-):-)