C语言中字符数组的声明-Norminette和编译器之间的冲突

vx6bjr1n  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(149)

我希望有人能澄清我做错了什么。我试图在C中复制strcpy函数。
这个练习要求我们通过一个src字符串创建两个循环,并替换目标字符串中每个对应索引的内容。我的问题是,当我在int main()中创建测试函数时,我初始化了一个字符数组并为其分配了一些内容。它编译得很好,但我得到了一个norminette错误:

// Method 1

char    str1[5] = "abcde";// Error: DECL_ASSIGN_LINE   Declaration and assignation on a single line

char    str2[5] = "fghij"; //Error: DECL_ASSIGN_LINE Declaration and assignation on a single line

如果我像下面这样初始化和赋值,Norminette是可以的,但是我会得到一个编译错误:
第一次
我也尝试过各种方法,包括str[5] =“abcde”,但都没有成功。我的问题是如何声明这些字符数组,以满足norminette和编译器的要求?
另外,我的理解是,在C语言中,字符数组和字符串是可以互换的概念吗?谢谢

8wigbo56

8wigbo561#

在方法2中:

str1[] = "abcde"; // error:

是 * 赋值 *,因此无效。[]语法只能在 * 定义 * 中使用。下面将详细介绍。
方法3是好的。不管是谁在标记这个都是错的。
在方法1 [和其他地方]中:

char str1[5] = "abcde";

是错误的,因为它应该是:

char str1[6] = "abcde";

以说明结尾处的EOS(0x00)字符串终止符。
另一种方法是:

char str1[] = "abcde";

而且,您在方法3中[或多或少]做到了这一点:

char str1[] = {'a', 'b', 'c', 'd', 'e', '\0'};

AFAICT,这是由外部工具(* 不是 * 编译器?)标记的。这是一个完全有效的替代方案。

bvn4nwqk

bvn4nwqk2#

还有我的理解是,在C中,字符数组和字符串是可以互换的概念吗?
不可以。在C语言中,string 是一个字符值序列,包括一个0值终止符。字符串"abcde"可以用序列{'a', 'b', 'c', 'd', 'e', 0}表示。该终止符是各种字符串处理例程(如strlenstrcpy)知道字符串结束位置的方法。
字符串(包括"abcde"之类的字符串文字)* 存储 * 在字符类型的数组中,但不是每个字符类型的数组都存储字符串-它可能是没有0值终止符的字符序列,也可能是包含多个0值字节的字符序列。
为了存储N个字符的字符串,数组必须 * 至少 * N+1个元素宽:

char str1[6] = "abcde";  // 5 printing characters plus 0 terminator
char str1[6] = "fghij";

你可以声明数组而不需要显式的大小,并且大小(包括终止符的+1)将由初始化器的大小决定:

char str1[] = "abcde"; // will allocate 6 elements for str1
char str2[] = "fghij";

我找到了documentation for Norminette和...
我知道你们学校希望每个人都遵循一个共同的编码标准;这使得它更容易分析和评分每个人的代码。但它的一些规则只是简单的 * 怪异 * 和非惯用的,具有讽刺意味的是,鼓励不良风格。如果我的解释是正确的,它希望你写你的初始化器

char str1[] 
  = "abcde";

或者是同样奇怪的事没人会这么做。
解决此问题的一种方法是不在声明中初始化数组,而是使用strcpy单独对其赋值:

char str1[6]; // size is required since we don't have an initializer
char str2[6];

strcpy( str1, "abcde" );
strcpy( str2, "fghij" );

不能使用=在声明之外对整个数组赋值(初始化和赋值不是一回事)。

str1 = "abcde";

作为陈述。
要么使用strcpystrncpy(用于字符串)或memcpy(用于非字符串)这样的库函数,要么单独为每个元素赋值:

str1[0] = 'a';
str1[1] = 'b';
str1[2] = 'c';
...

相关问题