在C语言中,我们都知道字符串是永恒的话题,字符串含有很多地雷,你稍不留心就会被砸到,比方说,字符串的结尾是'\0',也是占一个字符空间的,那么如果我们在利用strcpy拷贝字符串的时候,应该多加1个字符空间,就是专门留给这个'\0'的。

如果我们不多加一个字符空间,会发生致命的错误,那么我们通过案例来说明。

-------------我是分割线------------------

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
 
int main()
{
    char str[] = "MengLiang";
    //此处分配空间没有考虑到'\0'
    char* New_str = (char*)malloc(strlen(str));
     
    strcpy(New_str, str);
     
    printf("The New_str = %s\n", New_str); 
    free(New_str);
    New_str = NULL;
     
    system("pause");
    return 0;
}

-------------我是分割线------------------

我在注释中已经写了,那么这小段程序的结果呢?

拷贝字符串

-------------我是分割线------------------

正确的修改为:

-------------我是分割线------------------

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
 
int main()
{
    char str[] = "MengLiang";
    //此处的加1就是为'\0'来服务的
    char* New_str = (char*)malloc(strlen(str)+1);
     
    strcpy(New_str, str);
     
    printf("The New_str = %s\n", New_str);
     
    free(New_str);
    New_str = NULL;
     
    system("pause");
    return 0;
}

-------------我是分割线------------------

C语言的自由意味着我们要自制!

----------------------------------------------

本文出自 “享受科技带来的快乐” 博客,请务必保留此出处http://liam2199.blog.51cto.com/2879872/1420096


相关文章: