c语言新手想问个报错的问题

P1308 [NOIP2011 普及组] 统计单词数

@[Akiraku](/user/1111227) 你定义的是字符数组,字符串数组是`string ss[1000000][10];`
by Mo默Sh笙 @ 2023-11-15 11:44:09


c语言没有 `string` 啊喂。
by ShwStone @ 2023-11-15 11:48:32


@[Mo默Sh笙](/user/189485) c 语言没有 string
by DioxygenDifluoride @ 2023-11-15 11:48:37


@[Akiraku](/user/1111227) strcpy(ss[0],"abc")
by DioxygenDifluoride @ 2023-11-15 11:49:31


@[Akiraku](/user/1111227) c语言的字符数组只有在定义的时候才能赋值。字符数组中的每一个元素实际上仍然是字符,只有整个最后一维连在一起才是字符串。指定除了最后一维之外的维度就可以获得字符串的指针。 大概像这样: ```c #include<stdio.h> #include<string.h> int main() { char ss[100][10] = { "abc" }; printf("%s\n", ss[0]); return 0; } ```
by ShwStone @ 2023-11-15 11:54:11


如果你想要在定义之后赋值,可以使用 `memcpy` `strcpy` `sprintf` 之类的函数,但是是不支持直接赋值的。 ```c char a[10], b[10] = "abc"; memcpy(a, b, sizeof a); strcpy(a, "abc"); sprintf(a, "abc"); ```
by ShwStone @ 2023-11-15 11:56:35


另外一提,用引号括起来的字符串在c语言中就是 `const char *`,代表者一个指向常量字符串开头的字符指针。而你定义的字符串实际也应该被看成指针,在对 `char a[10] = "abc"` 赋值的时候,并不是对 `a[0],a[1],a[2]` 赋值,而应该理解为对于指针 `(char *)a` 做了赋值。
by ShwStone @ 2023-11-15 11:59:42


指针之类的是c语言的精髓,初学看不懂也是很常见的,可以多去看看C语言的教材
by ShwStone @ 2023-11-15 12:01:00


@[DioxygenDifluoride](/user/260985) az原来是C语言,我想当然了
by Mo默Sh笙 @ 2023-11-15 12:45:49


@[ShwStone](/user/491204) “指定除了最后一维之外的维度就可以获得字符串的指针。” 意思是定义字符数组的时候给除了最后一维的其他维赋值吗?
by Akiraku @ 2023-11-16 14:31:37


| 下一页