C语言中字符串赋值的几个理解

在C语言中,字符串的赋值主要有两种方法,第一种是通过指针的方式直接赋值,第二种是通过数组直接赋值。

  一、首先,我们来看第一种赋值方法:指针式赋值

我们知道,上面的示例是显然可以正常执行的,也是很容易理解的。但是下面这种方式就令人有点难以理解和头大了。

通过程序的运行情况,我们可以知道:char *p = "hello";这种字符串的赋值方式是完全没有问题的。要理解这种赋值方式,我们首先得理解双引号(特别注意:这个是双引号,不要赋值的时候给弄了个单引号)在这个语句中做了什么工作。双引号主要做了3个工作,分别是:

(1)申请了空间(在常量区),存放了字符串。

(2)在字符串尾加上了“\0”。

(3)返回地址。

这里所返回的地址就赋值给了char *类型的指针变量p。

二、通过字符数组直接把字符串赋值。程序如下:

三、需要注意的一些问题

(1)直接把字符串赋值给数组名(也就是数组首元素的首地址)是不行的

原文地址:https://www.cnblogs.com/xing-ting/p/9782166.html

时间: 2024-11-10 21:41:46

C语言中字符串赋值的几个理解的相关文章

c语言中字符串操作的工具类

 1.编写头文件 #define _CRT_SECURE_NO_WARNINGS //#pragmawarning(disable:4996) #include <stdio.h> #include <stdlib.h> #include <string.h> struct CString { char *p;        //保存字符串首地址 int reallength; //实际长度 }; typedef struct CString mystring;//

D语言中字符串的操作

字符串的操作在软件开发中是特别重要的一个事情,因为基本上的编程都会使用到字符串,字符串操作的好坏决定着一个语言的好与差.在我做过的一个项目中曾经就出现过字符串操作性能问题. D语言字符串有 string,wstring,dstring三种类型,在D语言中字符串是使用字符数组定义的,三种类型分别对应char,wchar,dchar.char只有一个字节,wchar为双字节,dchar为三字节.对字符串的操作也相当于是对数组的操作,这跟其它语言不一样,C++中字符串是以string类来进行封装,它的

C语言中字符串如何转换为二进制、八进制、十进制、十六进制

在C语言某个程序当中需要把文本16进制转换成对应的16进制数,比如字符串"0x1a"转换成10进制的26,可以用以下函数来实现 相关函数: atof, atoi, atol, strtod, strtoul表头文件: #include <stdlib.h>定义函数: long int strtol(const char *nptr, char **endptr, int base):函数的解释说明 这个函数会将参数nptr字符串根据参数base来转换成长整型数.参数base

c语言中字符串的匿置 超级简单

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> void main() { char * src = "hello,world"; printf("%d", src[10]); char *dest = NULL; //开辟内存空间 然后多开辟一个用来存储字符串的结束符 dest= (char *)mal

go语言中字符串分割

go语言中字符串的分割分以下几种: 1.根据空格键进行分割 方法:strings.Fields(s string) []string s:要分割的字符串 返回结果为[]string 例: s:=" ab cd          ef gh ij kl " arr:=strings.Fields(s) fmt.Printf("arr:%q\n",arr) 结果为:arr:["ab" "cd" "ef" &qu

c语言中字符串跨行书写的问题

字符串常量定义时的换行问题 如果我们在一行代码的行尾放置一个反斜杠,c语言编译器会忽略行尾的换行符,而把下一行的内容也算作是本行的内容.这里反斜杠起到了续行的作用.        如果我们不使用反斜杠,当我们试图初始化一个跨多行的字符串是,c语言编译器就会发出警告.如下面的语句所示:char letters[] = {"abcdefghijklmnopqrstuvwxyz  ABCDEFGHIJKLMNOPQRSTUVWXYZ"};      但是我们在行尾使用反斜杠, 那么就可以吧字

C语言中字符串和字符数组的区别

字符数组: char a[2]={'a','b','c'}; char a[]={'a','b','c'}; 字符串: char a[3]={"abc"}; char a[3]="abc";   //此处可以省略大括号 char a[]="abc";     // 与char a[3]={'a','b','c','\0'};    相同 红字表明的地方为什么要变成3呢,因为字符串赋值给数组后,在最后会默认增加一个字符"\0",

对于C语言中数组名是指针的理解

我们都知道,c语言中数组名是一个指针,比如下面这段代码 #include<iostream>using namespace std;int main(){ int a[4]={1,2,3,4}; for(int i=0;i<4;i++) {  cout<<*(a+i);//*(a+i)和a[i]是等价的.  cout<<endl; } return 0;} 但是看下面这个代码 #include<iostream>using namespace std;

Go语言中地址传递及指针的理解

在学习指针时遇到一个问题,在网上贴出后,得到很多前辈的指导和耐心解答,在此表示感谢,因此整理了此篇文章. 第一次实验,代码如下: type Student struct { Name string } func remove(stu *Student) { fmt.Printf("2----%v\n", stu) stu = nil fmt.Printf("3----%v\n", stu) } func main() { stu := &Student{&q