首页 > 代码库 > 【C】字符串常量和字符数组
【C】字符串常量和字符数组
此次博客是转载某位博主的文章,不过现在找不到了,所以先声明一下。
先贴一段代码:
#include <stdio.h> int main(int argc, const char** argv) { char str_1[6] = "Crazy1"; char* str_2 = "Crazy2"; if (str_1 == "Crazy1") { printf("%s\n", "字符数组OK"); } if (str_2 == "Crazy2") { printf("%s\n", "字符串常量OK"); } return 0; }
结果: 字符串常量OK
区别分析:
字符数组和字符串常量的区别,本质区别:前者在栈上分配空间,后者存储在静态存储区等。
这里 str_2是指针, 指向”Crazy2″这个字符串常量的内存首地址, 而str_1是在栈里分配的字符数组”Crazy1″的首地址.
字符串常量是在编译时就确定的, 而字符数组是在运行时确定的.
字符数组为什么不行呢? 很显然 因为他们不属于同一个内存空间.
建议: C字符串比较都使用strcmp
C++ string类就可以直接使用==操作。
反汇编:
.section .rodata .LC0: .string "Crazy2" .LC1: .string "OK" .text .globl main .type main, @function main: pushl %ebp movl %esp, %ebp andl $-16, %esp subl $32, %esp movl $2053206595, 22(%esp) movw $12665, 26(%esp) movl $.LC0, 28(%esp) cmpl $.LC0, 28(%esp) jne .L2 movl $.LC1, (%esp) call puts .L2: movl $0, %eax leave ret .size main, .-main .ident "GCC: (GNU) 4.5.1 20100924 (Red Hat 4.5.1-4)" .section .note.GNU-stack,"",@progbits
【C】字符串常量和字符数组
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。