这段代码有什么问题? (基本C代码)

时间:2014-04-03 21:07:33

标签: c syntax-error runtime-error

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char *a = "kitty";
    const int a_length = strlen(a);

    char *my_kitty = malloc(a_length);

    strcpy(my_kitty, a);

    printf("%s\n", my_kitty);

    return EXIT_SUCCESS;
}

这段代码有什么问题?对malloc进行空检查? 我对指针感到困惑。

4 个答案:

答案 0 :(得分:2)

不要为空终结符分配额外的+1!

char *my_kitty = malloc(a_length + 1);
... strcpy()

my_kitty [a_length] = 0;

(根据评论,strcpy也将复制空终止符)

修改

Just be careful当使用strcpystrncpy时 - 如果省略空终止符,前者容易出现缓冲区溢出,后者虽然在限制它将限制的意义上更安全如果剩余的长度不足,则复制的字符数将省略空终止符。

答案 1 :(得分:1)

尽量避免使用strcpy。取而代之的是,

strncpy(my_kitty, a, a_length + 1);

答案 2 :(得分:1)

我认为strlen在string.h上。

NAME
     strlen, strnlen -- find length of string

LIBRARY
     Standard C Library (libc, -lc)

SYNOPSIS
     #include <string.h>

答案 3 :(得分:1)

您为字符串的文本部分分配了空间,但没有为其零字符终结符分配空间。空终止字符串所需的空间由strlen(string)+ 1。

给出