我应该为我的一个班回答一个家庭作业问题。具体来说,我应该说是否将C中的某些数组视为字符串。根据本文(https://www.geeksforgeeks.org/strings-in-c-2/),我知道字符串是一个字符数组,结尾是空终止符。
我的主要困扰是询问如下数组的问题:
char c1[] = { 'C', 'S', '\0', '3', '2', '4', '\0' };
显然这是一个字符数组,末尾有一个空终止符。但是,由于它的中间也有一个空终止符,它是否仍被认为是字符串?这将如何影响字符串?
编辑:根据评论,我提供了问题的实际措辞:
“出于将它们用作strcpy(),strncpy(),strcmp(),strncmp()和类似的字符串函数(表示所有适用)的参数的目的,可以将以下哪些数组视为“字符串”?”
编辑:我给我的教授发了电子邮件,因为这个问题的措词似乎模棱两可(正如一些人指出的那样)。如果有人好奇,他告诉我“是的,它是一个字符串。关键是有一个空字符。但是,这当然会影响任何字符串操作;该字符串以空字符结尾。”
strcmp()
。是否可以将其用作更改字符串函数的参数取决于未提供的其他因素。
c1
是可变的,所以我不明白为什么它不能成为有效的目标参数strcpy
或类似参数,除非它的大小不足以容纳源字符串。那不会使它不是字符串,只是不是给定目的的合适字符串。
c1
将满足所有标准库(窄)字符串函数(包括所有专门命名的字符串函数)的字符串参数的基本要求,但该行为可能不是调用者期望或想要的(甚至忽略了可能引发的未定义行为)。
char
。任何字符类型都可以。
"CS"
附加了几字节垃圾的字符串(在这种情况下,最后的 NUL字符无关紧要)。但这不是一个“整体”字符串。-尽管如此,将其馈入strcpy
等不会使您的PC爆炸,因为这些功能只会“看到”"CS"
零件。