c语言基础—-字符串数组

c语言基础—-字符串数组字符串在C语言中,字符串实际上是使用 null 字符'\0'终止的一维字符数组。因此,一个以null结尾的字符串,包含了组成字符串的字符。字符定义输

大家好,又见面了,我是你们的朋友全栈君。

字符串

在 C 语言中,字符串实际上是使用 null 字符 ‘\0’ 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。

<span role="heading" aria-level="2"> c语言基础----字符串数组

 

字符定义输出

void main()
{
     char a='a';
     printf("%c",a); 
}

 

字符串定义输出

下面的使用字符串数组声明和初始化创建了一个 “Hello” 字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词 “Hello” 的字符数多一个。

char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

依据数组初始化规则,您可以把上面的语句写成以下语句:

void main()
{
    char str[]="hello";
    printf("%s",str); 
}

操作字符串的函数:

1、 strcpy(s1, s2);
复制字符串 s2 到字符串 s1。
2、 strcat(s1, s2);
连接字符串 s2 到字符串 s1 的末尾。
3、 strlen(s1);
返回字符串 s1 的长度。
4、 strcmp(s1, s2);
如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。
5、 strchr(s1, ch);
返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
6、 strstr(s1, s2);
返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。

 

结构体中字符串赋值

字符串数组赋值

struct student 
{ 
  int num; 
  char name[10]; 
}; 
 
int main() 
{ 
  student st; 
  st.num = 10; 
  //st.name = "linjunjie"; //字符串不能用=赋值
  strcpy(st.name, "linjunjie");
  return 0; 
}

 

字符串指针赋值

int main(){
    struct{
        char *name;  //姓名
    } stu1;

    //给结构体赋值
    stu1.name = "Tom";
}

char *p = “hello”;

上边的表达式为什么可以,而把p换成数组,然后再赋值就不行了

解释:

字符串常量”hello”出现在一个表达式中时,”hello”表达式使用的值就是这些字符所存储的地址(在常量区),而不是这些字符本身。

所以,可以把字符串赋值给指向字符的指针p,而不能把字符串赋值给一个字符数组。 

char a[10] = “hello”; //这样可以,这种情况是c语言初始化所支持的

如果写成char a[10];然后 a = “hello” 这样就错误了。 

同样是a数组,char a[10] = “hello”;这种是数组的初始化,和a[0] = ‘h’ a[1] = ‘e’…是一个道理

但是换成char a [10];然后a = “hello”就不行了, “hello”赋值的值是一个地址,而a虽然也有地址,但是这与指针是不一样的,指针的值是地址,而数组的值虽然也是地址,但是却是一个常量,所以不能给常量赋值。

相关文章:C语言中,为什么字符串可以赋值给字符指针变量

 

数组

数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。

 

声明数组

type arrayName [ arraySize ];

叫做一维数组。arraySize 必须是一个大于零的整数常量,type 可以是任意有效的 C 数据类型。

 

初始化数组

在 C 中,您可以逐个初始化数组,也可以使用一个初始化语句,如下所示:

double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};

大括号 { } 之间的值的数目不能大于我们在数组声明时在方括号 [ ] 中指定的元素数目。

如果您省略掉了数组的大小,数组的大小则为初始化时元素的个数。因此,如果:

double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154819.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c语言列车调度,列车调度

    c语言列车调度,列车调度火车站的列车调度铁轨的结构如下图所示:两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入(一条轨道可以停放多个火车)。如果要求它们必须按序号递减的顺序从出口离开,则至少需要多少条平行铁轨用于调度?输入格式输入第一…

    2022年7月26日
    9
  • linux中sftp默认登录的端口号是多少? sftp通过指定的端口号连接?sftp默认端口号[通俗易懂]

    linux中sftp默认登录的端口号是多少? sftp通过指定的端口号连接?sftp默认端口号[通俗易懂]需求描述:  今天一个同事,遇到个问题,程序连接sftp服务器连接不上,问我端口号是多少,  我想了一下是21还是22,所以就做了测试,发现sftp默认的连接端口号是22,  在此做下记录.操作过程:1.使用sftp默认的端口号进行登录aiuap_cj@cuchc802:~>sftpaisftp@10.124.163.133aisftp@10.124.163.13…

    2025年11月16日
    4
  • Telerik的RadControls控件(三)

    Telerik的RadControls控件(三)相信大家学习了RadControl中的RadWindow、RadAjaxManager、RadAjaxLoadingPanel控件后,一定会觉得它是解放.Net技术人员Web开发的技术工具,从而不再为Asp。NET中的局部刷新而绞尽脑汁。  现在我告诉你,前边才仅仅是你发现Web开发更加容易、方便的第一步,通过下来项目中其他常用Rad控件的介绍,你会更加欣喜若狂。好了下来我就介绍另一重量级的控

    2022年7月24日
    9
  • 神经网络学习–用卷积神经网络进行图像识别「建议收藏」

    神经网络学习–用卷积神经网络进行图像识别「建议收藏」卷积神经网络特别适合处理像图片、视频、音频、语言文字等,这些与相互位置有一定关系的数据。卷积神经网络(ConvolutionalNerualNetwork,CNN)为什么计算机可以处理图片–因为在计算机语言中图片可以用数字化,用四维数组来表示既然卷积神经网络可以处理图片,那么我们就要理解图片在计算机语言中是如何表达的。图片其实是“点阵”图,由一个个点按照一定的顺序组合而成,那我们就可以联想到一个概念–数组。图片可以分为三类:纯黑白图片、灰度图片、彩色图片关于图片数字化,以最.

    2022年6月1日
    39
  • 虚拟现实开发一些建议怎么写_虚拟现实开发引擎

    虚拟现实开发一些建议怎么写_虚拟现实开发引擎本文章由cartzhang编写,转载请注明出处。所有权利保留。文章链接:作者:cartzhang【本文为原作者对虚拟现实开发的一些建议和理解,写的非常不错。理解的也非常透彻,希望对各位在路上的VR开发者有积极作用。】下面是我对虚拟现实开发一下建议。我已经把他们分为Vive相关,常规VR和更宽泛意义上的建议。更多建议请关注我的Twitter。一、Vive相关1.让玩家按下按键

    2025年11月10日
    2
  • pycharm画的图不弹出_Pycharm没报错但不出图

    pycharm画的图不弹出_Pycharm没报错但不出图在代码后加plt.show()如importmatplotlib.pyplotaspltimportseabornassnssns.heatmap(cm,cmap=sns.color_palette(‘Blues’),annot=True)plt.show()plt.plot(fpr1,tpr1)plt.show()

    2022年8月28日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号