为什么我的字符串为零?
Why is my string nil?
我制作了这个读取字符直到按下回车键的简单程序
var data: string
while true:
var c = readChar(stdin) # read char
case c
of '\r': # if enter, stop
break
else: discard
data.add(c) # add the read character to the string
echo data
但是当它尝试 echo data
时,它崩溃了
> ./program
hello
Traceback (most recent call last)
program.nim(11) program
SIGSEGV: Illegal storage access. (Attempt to read from nil?)
这意味着 data
为零。但是每次我按下输入一个字符时,它都会将该字符添加到 data
。出了点问题,但哪里出了问题?
当您将其定义为 var data: string
时,数据最初为 nil。相反,您可以使用 var data = ""
使其成为初始化字符串。
流stdin
缓冲所有字符,直到按下换行键,然后它才会提交字符。我预计行为会直接读取字符。
这意味着 \r
永远不会是这种情况,它将尝试向 data
添加一个字符,但数据是 nil
,因此失败。我认为它在 echo
声明中失败了。
为了演示,这段代码有效:
var data = ""
while true:
var c = readChar(stdin) # read char
case c
of '\e': # if escape, stop
break
else:
data.add(c) # add the read character to the string
echo data
我制作了这个读取字符直到按下回车键的简单程序
var data: string
while true:
var c = readChar(stdin) # read char
case c
of '\r': # if enter, stop
break
else: discard
data.add(c) # add the read character to the string
echo data
但是当它尝试 echo data
时,它崩溃了
> ./program
hello
Traceback (most recent call last)
program.nim(11) program
SIGSEGV: Illegal storage access. (Attempt to read from nil?)
这意味着 data
为零。但是每次我按下输入一个字符时,它都会将该字符添加到 data
。出了点问题,但哪里出了问题?
当您将其定义为 var data: string
时,数据最初为 nil。相反,您可以使用 var data = ""
使其成为初始化字符串。
流stdin
缓冲所有字符,直到按下换行键,然后它才会提交字符。我预计行为会直接读取字符。
这意味着 \r
永远不会是这种情况,它将尝试向 data
添加一个字符,但数据是 nil
,因此失败。我认为它在 echo
声明中失败了。
为了演示,这段代码有效:
var data = ""
while true:
var c = readChar(stdin) # read char
case c
of '\e': # if escape, stop
break
else:
data.add(c) # add the read character to the string
echo data