C 中具有 char 指针时的 strcpy

发布于 2024-12-09 02:01:20 字数 464 浏览 1 评论 0原文

我对 char 数组有一个简单的疑问。我有一个结构:

struct abc {
char *charptr;
int a;
}

void func1()
{
    func2("hello");
}

void func (char *name)
{
    strcpy(abc.charptr, name); // This is wrong. 
}

这个 strcpy 将导致崩溃,因为我没有为 charptr 分配任何内存。 问题是:对于malloc这块内存,我们可以

abc.charptr = (char *) malloc(strlen(name)); //?
strcpy(abc.charptr, name); // Is this (or strncpy) right ?

这样做吗?

I have a simple doubt in char arrays. I have a structure:

struct abc {
char *charptr;
int a;
}

void func1()
{
    func2("hello");
}

void func (char *name)
{
    strcpy(abc.charptr, name); // This is wrong. 
}

This strcpy will result in a crash since I do not have any memory allocated to the charptr.
The question is : For mallocing this memory, can we do

abc.charptr = (char *) malloc(strlen(name)); //?
strcpy(abc.charptr, name); // Is this (or strncpy) right ?

Is this right ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

极度宠爱 2024-12-16 02:01:20

如果您要使用malloc(),您需要记住为空终止符腾出空间。因此,在调用 strcpy() 之前使用 malloc(strlen(name)+1)

但在这种情况下,您应该只使用 strdup() 一次性完成分配和复制:

abc.charptr = strdup(name);

strdup() 返回的内存已使用 malloc 分配(),因此必须通过调用 free() 来释放。

If you were to use malloc() you need to remember to make room for the null-terminator. So use malloc(strlen(name)+1) before calling strcpy().

But in this case you should just use strdup() which does the allocation and copying in one go:

abc.charptr = strdup(name);

The memory returned by strdup() has been allocated with malloc() and hence must be disposed of with a call to free().

开始看清了 2024-12-16 02:01:20

它需要是:

abc.charptr = malloc(strlen(name)+1); ?
strcpy(abc.charptr, name);

strlen 的返回值不包含字符串末尾的空零“\0”的空间。

您还必须在某个时候释放分配的内存。

It needs to be:

abc.charptr = malloc(strlen(name)+1); ?
strcpy(abc.charptr, name);

The return value of strlen doesn't include space for the null zero '\0' at the end of the string.

You will also have to free your allocated memory at some point.

笑咖 2024-12-16 02:01:20
abc.charptr = (char *) malloc(strlen(name) + 1);

请注意 +1,因为您需要为空终止符留出空间。那么strcpy()就可以了。

abc.charptr = (char *) malloc(strlen(name) + 1);

Note the +1, since you need space for the null terminator. Then strcpy() will be fine.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文