c编程中的字符串

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)

Pan*_*mar 9

那是因为你的代码片段没有执行声明,但是赋值:

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)


Alo*_*ave 5

您不能使用赋值为字符串数组赋值.
在C中,您只能初始化不分配它们的数组,此规则的字符数组也不例外.

您将需要使用像strcpystrncpy等字符串复制功能.

但是,您可以将字符串封装在结构中并模拟:

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)