again再探字符串输入的分配空间
Created|Updated
|Post Views:
前言
我们平时使用
char str[] = "ferry";可以。
char str[10]; str = "ferry";不可以。
然鹅,还有给结构中的成员赋值的时候,可以直接用字符串初始化。这些原因都是因为开辟空间的问题。
说明
在初始化变量时,分配空间。结构也是如此。
不能将指针赋值给常量
char str1[]是array type
str1是常量,不是指针啊~
char *str2
str2是个指针(是个变量)
错误,不能给数组的地址(常量)赋值1 2 3 4 5 6 7 8 9 10
| #include<stdio.h> int main(int argc, char *argv[]) { char str1[30]; char * str2; str2 = "ferry"; str1 = str2;
return 0; }
|
如果我想要给str1数组添加字符咋办?那就用strcpy()复制进去
可以将数组的地址赋给指针
正确1 2 3 4 5 6 7 8 9 10 11
| #include<stdio.h> int main(int argc, char *argv[]) { char str1[30] = "ferry"; char * str2;
str2 = str1; printf("%c", *(str2 + 1));
return 0; }
|
结构的说明
*字符串在静态存储区,str[0]只不过是个地址,它指向了字符串。str[0]只是一个字符‘o’
只能以"<...>"这种字符串形式初始化1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include<stdio.h>
struct names { char first[20]; char last[20]; };
int main() { char * str[2] = {"ok", "ko"}; struct names veep = {str[0], str[1]}; struct names treas = {"ok", "ko"}; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #include<stdio.h> #include<string.h> typedef struct lens { float foclen; float fstop; char brand[30]; }LENS;
int main() { LENS bigeyes[10]; bigeyes[2].foclen = 500; bigeyes[2].fstop = 2.0; strcpy(bigeyes[2].brand, "Remarkata");
LENS smalleyes[10] = { [2] = { 500, 2, "Remarkatar" } }; return 0; }
|