【发布时间】:2020-06-06 08:43:42
【问题描述】:
我应该为我的一门课回答一个家庭作业问题。具体来说,我应该说 C 中的某些数组是否被视为字符串。根据这篇文章 (https://www.geeksforgeeks.org/strings-in-c-2/),我知道字符串是一个字符数组,末尾带有空终止符。
我的主要挂断是问题的一部分,该问题询问如下所示的数组:
char c1[] = { 'C', 'S', '\0', '3', '2', '4', '\0' };
这显然是一个以空结尾字符结尾的字符数组。但是,它是否仍然被视为字符串,因为它中间还有一个空终止字符?这将如何影响字符串?
编辑: 基于 cmets,我提供了问题的实际措辞:
“以下哪些数组可以被视为“字符串”,以便将它们用作 strcpy()、strncpy()、strcmp()、strncmp() 和类似字符串函数的参数(表示所有适用) ?”
编辑: 我给我的教授发了电子邮件,因为这个问题的措辞似乎含糊不清(正如几个人指出的那样)。如果有人好奇,他告诉我“是的,它是一个字符串。关键是有一个空字符。但这当然会影响任何字符串操作;字符串以空字符结尾。”
【问题讨论】:
-
您可能会说它是字符串
"CS",并附加了一些垃圾字节(在这种情况下,final NUL 字符无关紧要)。但它不是“作为一个整体”的字符串。 -- 尽管如此,将其提供给strcpy等不会使您的电脑爆炸,因为这些功能只会“看到”"CS"部分。 -
c1 可以绝对用作
strcmp()的参数。它是否可以用作变异字符串函数的参数取决于未提供的其他因素。 -
c1的内容是可变的,所以我不明白为什么它不能成为strcpy或类似的有效目标参数,除非它不够大以容纳源字符串。这不会使它不是一个字符串,只是不适合给定目的。 -
总的来说,我同意这个问题措辞含糊。表达式
c1将满足所有标准库的(窄)字符串函数的字符串参数的基本要求,包括所有特别命名的函数,但行为可能不是调用者期望或想要的(甚至忽略可能是未定义的行为)引出)。 -
请注意,type 不必是
char。任何字符类型都可以。
标签: c arrays string null-terminated