#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进行空检查? 我对指针感到困惑。
答案 0 :(得分:2)
不要为空终结符分配额外的+1!
char *my_kitty = malloc(a_length + 1);
... strcpy()
my_kitty [a_length] = 0;
(根据评论,strcpy
也将复制空终止符)
修改强>
Just be careful当使用strcpy
或strncpy
时 - 如果省略空终止符,前者容易出现缓冲区溢出,后者虽然在限制它将限制的意义上更安全如果剩余的长度不足,则复制的字符数将省略空终止符。
答案 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。
给出