C语言--字符串面试题

字符串是由若干字符组成的序列。由于字符串在编程时使用的频率非常高,为了优化,很多语言都对字符串做了特殊的规定。下面分别讨论C/C++字符串的特性。
C/C++中每个字符串都以字符"0作为结尾,这样我们就能很方便地找到字符串的最后尾部。但由于这个特点,每个字符串中都有一个额外字符的开销,稍不留神就会造成字符串的越界。比如下面的代码:

char str[10]="";
strcpy(str,"0123456789")

 我们先声明一个长度为10的字符数组,然后把字符串"0123456789"复制到数组中。

"0123456789"这个字符串看起来只有10个字符,但实际上它的末尾还有一个"0字符,因此它的实

际长度为11字节。要正确地复制该字符串,至少需要一个长度为11字节的数组。


 一个面试题:

请你分析一下的代打:输出的结果是什么

int main()
{
	char str1[] = "hello world";
	char str2[] = "hello world";

	if (str1 == str2)
		printf("str1 and str2 are same\n");
	else
		printf("str1 and str2 are not the same\n");

	const char* str3 = "hello world";
	const char* str4 = "hello world";

	if (str3 == str4)
		printf("str3 and str4 are same\n");
	else
		printf("str3 and str4 are not the same\n");

	return 0;
}

 运行结果:

字符串1和2不相等,字符串3和4是相等的。

分析:

为了节省内存,C / C++把常量字符串放到单独的一个内存区域。当几个指针赋值给相同的常量字符串时,它们实际上会指向相同的内存地址。但用常量内存初始化数组,情况却有所不同。str1和str2是两个字符串数组,我们会为它们分配两个长度为12字节的空间,并把"hello world"的内容分别复制到数组中去。这是两个初始地址不同的数组,因此 str1和 str2 的值也不相同,所以输出的第一行是"strl andstr2 are not same"str3和str4是两个指针, 我们无须为它们分配内存以存储字符串的内容而只需要把它们指向"hello world"在内存中的地址就可以了。由于"helloworld"是常量字符串,它在内存中只有一个拷贝,因此str3和str4 指向的是同一个地址。所以比较str3和str4的值得到的结果是相同的,输出的第二行是"str3 and str4 are same"。


本篇完!

相关推荐

  1. c语言:模拟字符串拷贝功能(strcpy),面试

    2024-03-16 10:16:02       13 阅读
  2. C语言C++面试 (包答案)

    2024-03-16 10:16:02       31 阅读
  3. PHP字符串面试

    2024-03-16 10:16:02       33 阅读
  4. PHP 字符串面试

    2024-03-16 10:16:02       33 阅读
  5. PHP字符串面试

    2024-03-16 10:16:02       30 阅读
  6. 腾讯面试C语言

    2024-03-16 10:16:02       51 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-16 10:16:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-16 10:16:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-16 10:16:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-16 10:16:02       20 阅读

热门阅读

  1. html5&css&js代码 021 实体字符参考

    2024-03-16 10:16:02       17 阅读
  2. C语言经典面试提米(十四)

    2024-03-16 10:16:02       21 阅读
  3. 开发指南012-后台编程步骤

    2024-03-16 10:16:02       21 阅读
  4. 蓝桥杯刷题|04入门真题

    2024-03-16 10:16:02       19 阅读
  5. oracle分区表和分区表exchange

    2024-03-16 10:16:02       21 阅读
  6. vue文件结构

    2024-03-16 10:16:02       19 阅读
  7. Spring 初学者遇到的问题

    2024-03-16 10:16:02       20 阅读
  8. 什么是多模态学习?

    2024-03-16 10:16:02       24 阅读
  9. C#使用Entity Framework Core处理数据库(二)

    2024-03-16 10:16:02       19 阅读
  10. 要导出 PostgreSQL 数据库中的数据使用 pg_dump 命令

    2024-03-16 10:16:02       20 阅读
  11. android 快速实现 Switch 样式

    2024-03-16 10:16:02       21 阅读
  12. 完美十进制数——去年天梯校赛

    2024-03-16 10:16:02       21 阅读