C中字符串定义的细节是什么?
What are the specifics of the definition of a string in C?
我应该为我的 类 回答一个家庭作业问题。具体来说,我应该说 C 中的某些数组是否被视为字符串。根据这篇文章 (https://www.geeksforgeeks.org/strings-in-c-2/) 我知道字符串是一个字符数组,末尾有空终止符。
我的主要问题是问题的一部分,它询问的数组如下所示:
char c1[] = { 'C', 'S', '[=10=]', '3', '2', '4', '[=10=]' };
这显然是一个字符数组,末尾有一个空终止符。但是,它仍然被认为是一个字符串,因为它在中间也有一个空终止字符吗?这将如何影响字符串?
编辑:
根据评论,我提供了问题的实际措辞:
"Which of the following arrays can be considered "strings" 用于将它们用作 strcpy()、strncpy()、strcmp()、strncmp() 和类似字符串函数的参数(表示所有应用)?" =12=]
编辑:
我给我的教授发了电子邮件,因为这个问题的措辞似乎含糊不清(正如几个人指出的那样)。如果有人好奇,他告诉我"Yes it is a string. The key is that there is a null character. But of course that will effect any string operations; the string ends at the null character."
c1
主要是 [1] 等同于 &c1[0]
,它持有一个字符串,"CS"
.
那里潜伏着第二个字符串,"324"
,从 &c1[3]
开始——但只要您以 c1
访问 c1
,字符串 "CS"
是所有函数 strcpy()
等。会看到。
[1]:c1
是数组,&c1[0]
是指针。
如果您想了解 C 中字符串定义的细节,请转到源代码。
7 Library
7.1 Introduction
7.1.1 Definitions of terms
A string is a contiguous sequence of characters terminated by and including the first null character. A “pointer to” a string is a pointer to its initial (lowest addressed) character. The “length” of a string is the number of characters preceding the null character and its “value” is the sequence of the values of the contained characters, in order.
(后期标准无相关变化)
因此,c1
包含两个连续的字符串,“CS”和“324”,但它本身不是一个字符串。
如果我们将一个数组传递给一个函数,它会衰减到指向其第一个元素的指针,因此 +c1
指向一个字符串(第一个),这对于任何需要指针的函数来说已经足够了串起来。它不指向字符串“CS24”,但这可能足以解决您的教师问题,这是模棱两可的。
添加到@DevSolar 的答案,这是我在玩弄给定字符串后发现的,如果它是:
char c1[] = { 'C', 'S', '\0', '3', '2', '4', '\0' };
如果你输出这个字符串,你会得到CS03240
,这个字符串的大小是7。据我的理解,\0
用来表示空字符(即 [=15=]
)。如果你这样做:
printf("[=11=]");
您在输出日志中看不到任何内容,但如果您看到:
printf("\0");
您看到 [=15=]
,这是预期的,因为要输出反斜杠或引号等特殊字符,您需要与它们一起使用 \
。
令我困惑的是输出 CS03240
并且它的大小为 7。通常理解字符串的大小是其中的字符数加上一个(对于空字符)。此外,即使字符串的大小也是 7,
char c1[] = { 'C', 'S', '[=19=]', '3', '2', '4', '[=19=]' };
.
所以也许可以跟进这个问题,这是怎么回事?
我应该为我的 类 回答一个家庭作业问题。具体来说,我应该说 C 中的某些数组是否被视为字符串。根据这篇文章 (https://www.geeksforgeeks.org/strings-in-c-2/) 我知道字符串是一个字符数组,末尾有空终止符。
我的主要问题是问题的一部分,它询问的数组如下所示:
char c1[] = { 'C', 'S', '[=10=]', '3', '2', '4', '[=10=]' };
这显然是一个字符数组,末尾有一个空终止符。但是,它仍然被认为是一个字符串,因为它在中间也有一个空终止字符吗?这将如何影响字符串?
编辑: 根据评论,我提供了问题的实际措辞:
"Which of the following arrays can be considered "strings" 用于将它们用作 strcpy()、strncpy()、strcmp()、strncmp() 和类似字符串函数的参数(表示所有应用)?" =12=]
编辑: 我给我的教授发了电子邮件,因为这个问题的措辞似乎含糊不清(正如几个人指出的那样)。如果有人好奇,他告诉我"Yes it is a string. The key is that there is a null character. But of course that will effect any string operations; the string ends at the null character."
c1
主要是 [1] 等同于 &c1[0]
,它持有一个字符串,"CS"
.
那里潜伏着第二个字符串,"324"
,从 &c1[3]
开始——但只要您以 c1
访问 c1
,字符串 "CS"
是所有函数 strcpy()
等。会看到。
[1]:c1
是数组,&c1[0]
是指针。
如果您想了解 C 中字符串定义的细节,请转到源代码。
7 Library
7.1 Introduction
7.1.1 Definitions of terms
A string is a contiguous sequence of characters terminated by and including the first null character. A “pointer to” a string is a pointer to its initial (lowest addressed) character. The “length” of a string is the number of characters preceding the null character and its “value” is the sequence of the values of the contained characters, in order.
(后期标准无相关变化)
因此,c1
包含两个连续的字符串,“CS”和“324”,但它本身不是一个字符串。
如果我们将一个数组传递给一个函数,它会衰减到指向其第一个元素的指针,因此 +c1
指向一个字符串(第一个),这对于任何需要指针的函数来说已经足够了串起来。它不指向字符串“CS24”,但这可能足以解决您的教师问题,这是模棱两可的。
添加到@DevSolar 的答案,这是我在玩弄给定字符串后发现的,如果它是:
char c1[] = { 'C', 'S', '\0', '3', '2', '4', '\0' };
如果你输出这个字符串,你会得到CS03240
,这个字符串的大小是7。据我的理解,\0
用来表示空字符(即 [=15=]
)。如果你这样做:
printf("[=11=]");
您在输出日志中看不到任何内容,但如果您看到:
printf("\0");
您看到 [=15=]
,这是预期的,因为要输出反斜杠或引号等特殊字符,您需要与它们一起使用 \
。
令我困惑的是输出 CS03240
并且它的大小为 7。通常理解字符串的大小是其中的字符数加上一个(对于空字符)。此外,即使字符串的大小也是 7,
char c1[] = { 'C', 'S', '[=19=]', '3', '2', '4', '[=19=]' };
.
所以也许可以跟进这个问题,这是怎么回事?