4 c string pointers initialization
为什么我无法编译包含代码的程序
char name[10];
name= "Rajesh";
Run Code Online (Sandbox Code Playgroud)
虽然我能够编译一个程序
char name[10]="Rajesh";
Run Code Online (Sandbox Code Playgroud)
那是因为你的代码片段没有执行声明,但是赋值:
char name[10]; // Declaration
name= "Rajesh"; // Assignment.
Run Code Online (Sandbox Code Playgroud)
并且数组不能直接在C中分配.
该名称name实际上解析为其第一个元素(&name[0])的地址,该元素不是左值,因此不能作为赋值的目标.
字符串变量声明和赋值
字符串变量可以像其他数组一样声明:
char phrase[14];
Run Code Online (Sandbox Code Playgroud)
字符串数组可以在声明的同时初始化或部分初始化,使用括号"{}"括号中的值列表(对于其他数据类型的数组也是如此).例如,声明
char phrase[14] = {'E','n','t','e','r',' ','a','g','e',':',' ','\0'};
Run Code Online (Sandbox Code Playgroud)
两者都声明数组"短语"并将其初始化为状态.该声明
char phrase[14] = "Enter age: ";
Run Code Online (Sandbox Code Playgroud)
是等价的.如果省略"14",将创建一个足够大的数组,以包含值""Enter age:""和sentinel字符"'\ 0'",以便这两个语句
char phrase[] = {'E','n','t','e','r',' ','a','g','e',':',' ','\0'};
char phrase[] = "Enter age: ";
Run Code Online (Sandbox Code Playgroud)
彼此等同于声明
char phrase[12] = "Enter age: ";
Run Code Online (Sandbox Code Playgroud)
但是,重要的是要记住字符串变量是数组,因此我们不能只使用运算符"="和"=="进行赋值和比较.例如,我们不能简单地写
phrase = "You typed: "; //Wrong way
Run Code Online (Sandbox Code Playgroud)
相反,我们可以使用一组特殊的函数进行字符串赋值和比较.
编辑:
另一种方法是使用指针: -
声明变量
char const *phrase; /* a pointer to type character */
Run Code Online (Sandbox Code Playgroud)
并根据需要初始化变量
phrase = "Test string";
Run Code Online (Sandbox Code Playgroud)
您不能使用赋值为字符串数组赋值.
在C中,您只能初始化不分配它们的数组,此规则的字符数组也不例外.
您将需要使用像strcpy或strncpy等字符串复制功能.
但是,您可以将字符串封装在结构中并模拟:
typedef struct Yourstring Yourstring;
struct Yourstring
{
char a[24];
};
Yourstring a = { "abcd" };
Yourstring b = a;
Yourstring c = { 0 };
c = b;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
360 次 |
| 最近记录: |