C:Eclipse/gdb和以Null结尾的字符串

C:Eclipse/gdb和以Null结尾的字符串,c,eclipse,string,gdb,C,Eclipse,String,Gdb,如何判断一个字符串在Eclipse和gdb中是否以null结尾?在“Default”的Debug下,如果我只看到要存储在引号中的文本,我可以假定它正确地以null结尾? 另外,复制字符串以确保其正确终止的最佳方法是什么?使用strncpy以确保安全,这允许您指定最大长度,以防其未终止。检查起来有点棘手,但如果在调试器中正确显示,则正确终止 Edit:应该清楚地表明,它只在函数调用不会产生奇怪结果的意义上使其安全。如果指定长度,则仍然必须手动终止字符串 一般来说,它不会以null结尾的唯一时间是由

如何判断一个字符串在Eclipse和gdb中是否以null结尾?在“Default”的Debug下,如果我只看到要存储在引号中的文本,我可以假定它正确地以null结尾?
另外,复制字符串以确保其正确终止的最佳方法是什么?

使用strncpy以确保安全,这允许您指定最大长度,以防其未终止。检查起来有点棘手,但如果在调试器中正确显示,则正确终止

Edit:应该清楚地表明,它只在函数调用不会产生奇怪结果的意义上使其安全。如果指定长度,则仍然必须手动终止字符串


一般来说,它不会以null结尾的唯一时间是由于程序员错误,因为我相信C库中的所有函数都返回正确终止的字符串,可能的错误是忘记了终止符的额外字节。我很难想象我遇到的字符串问题是由于空终止符失败造成的,自定义操作函数除外。

为了安全起见,使用strncpy可以指定最大长度,以防其未终止。检查起来有点棘手,但如果在调试器中正确显示,则正确终止

Edit:应该清楚地表明,它只在函数调用不会产生奇怪结果的意义上使其安全。如果指定长度,则仍然必须手动终止字符串


一般来说,它不会以null结尾的唯一时间是由于程序员错误,因为我相信C库中的所有函数都返回正确终止的字符串,可能的错误是忘记了终止符的额外字节。我很难想象我遇到的字符串问题是由于空终止符失败造成的,除了自定义操作函数。

在gdb中,“x/100sb string variable”将显示前100个字符。用适当的数字替换100以查看您的字符串。gdb x/100sb不确定,因为字符串旁边的内存位置可能有随机空值。在gdb中,“x/100sb字符串变量”将显示前100个字符。用适当的数字替换100以查看您的字符串。gdb x/100sb不确定,因为字符串旁边的内存位置可能有随机空值。这是错误的建议-
strncpy()
不会空值。如果源字符串为
n
个字符或更长,则终止缓冲区。如中所述——“我们还发现了许多程序员试图使用strncpy()和strncat()进行安全字符串操作,但未能掌握API的微妙之处。”@MichaelBurr我知道,我的意思是,如果他不确定strncpy是否以null结尾,他应该使用strncpy,他仍然应该使用null来终止它。这是一个错误的建议-
strncpy()
如果源字符串为
n
个字符或更长,则不会使用null来终止缓冲区。如中所述——“我们还发现了许多程序员试图使用strncpy()和strncat()进行安全字符串操作,但未能掌握API的微妙之处。”@MichaelBurr我知道,我的意思是,如果他不确定strncpy是否以null结尾,他应该自己使用null结尾。