如何在C中处理字符串?

时间:2014-09-22 20:46:13

标签: c linux string

我使用的是64位linux机器,所以我的指针大小是8个字节。所以看下面的代码,我在下面的程序中H之后编写了段程序中的段错误(在strcpy())。但似乎没有发生。在下面的程序中,我认为它会超出并破坏x中的内存。以下程序在我的系统上正常运行,但如果我在strcpy()中添加了另一个字母,则会出现段错误。所以这样的问题显然是系统依赖的,但这个字符串怎么不会崩溃程序呢?我确实搜索过这样的问题,如果有一些链接,你也可以直接找我。提前谢谢。

int main()
{

int x;
char* c ;

x = 0xF0000000;

strcpy(&c,"ABCDEFGHFFFFFF");
x++;
printf("%X\n",x);

printf("%s\n",&c);

}

1 个答案:

答案 0 :(得分:0)

关于C中的指针和内存管理:

  • 您必须手动创建指针
  • 你必须手动分配内存
  • 您必须初始化指针以手动指向已分配的内存

表达式

char *c;

只创建指针,但它既没有为字符分配任何内存,也没有初始化指向已分配内存的指针。

你做得更好:

char c[20];

c的行为就像一个指针,但同时你已经分配了一个20字节的缓冲区(在main的堆栈帧中)和{{1}指向它的开始。

当使用字符串(字符指针)时,你不要c到指针的地址,而是到指针所占的地址:

strcpy

正如旁注:表达式strcpy(c, "ABCDEFGHFFFFFF"); 在文本文本中分配一个常量字符缓冲区,并在内存中分配终止零并返回其地址。这就是为什么这种用法是合法的。