标签: strdup

296
推荐指数
6
解决办法
38万
查看次数

strcpy vs strdup

我读到的strcpy是复制字符串,并strdup返回指向新字符串的指针以复制字符串.

您能否解释一下您喜欢使用strcpy哪些情况以及您更喜欢使用哪些情况strdup

c strdup strcpy

65
推荐指数
4
解决办法
7万
查看次数

strdup还是_strdup?

当我strdup在Microsoft Visual C++中使用时,它警告我:

警告C4996:'strdup':不推荐使用此项目的POSIX名称.而是使用符合ISO C++的名称:_strdup.详细信息请参见在线帮助.

这似乎_strdup是正确的.

但是当我_strdup在GCC(Fedora Linux OS)中使用时,编译器显示错误:

错误:未在此范围内声明'_strdup'

使用GCC和Linux,编译器不会显示任何错误strdup.

哪个是正确的 - strdup或者_strdup

注意:我包含<string.h>在我的代码中.

c c++ strdup visual-studio

54
推荐指数
6
解决办法
4万
查看次数

Obj-C:在strdup帧中的Malloc 48字节的内存泄漏

在我的应用程序中,我收到了多个内存泄漏.对象是Malloc 48字节,它始终来自负责的调用者strdup.该对象的历史记录仅显示它是Malloced,没有其他保留或释放.堆栈跟踪不显示我的任何代码.我可以选择的唯一相关内容是:

  10 UIKit _UIGestureRecognizerSendActions
   9 UIKit -[UIScrollView handlePan:]
   8 UIKit -[UIScrollView _endPanWithEvent:]
   7 UIKit -[UIScrollView(Static) _startTimer:]
   6 CoreFoundation CFNotificationCenterAddObserver
   5 CoreFoundation _CFXNotificationRegisterObserver
   4 libnotify.dylib notify_register_dispatch
   3 libnotify.dylib notify_register_mach_port
   2 libnotify.dylib token_table_add
   1 libsystem_c.dylib strdup
   0 libsystem_c.dylib malloc
Run Code Online (Sandbox Code Playgroud)

它似乎在地图视图上滚动时发生,但我不确定如何继续,因为堆栈中没有引用我的代码.我该如何进行诊断?

如果需要任何进一步的信息,请告诉我.

问候,尼克

memory-leaks objective-c strdup

20
推荐指数
1
解决办法
7635
查看次数

strdup()函数

我最近意识到strdup()我喜欢在OS X上使用的功能不是ANSI C的一部分,而是POSIX的一部分.我不想重写我的所有代码,所以我想我只是要编写自己的strdup()函数.这并不难,真的,它只是一个malloc()和一个strcpy().无论如何,我有这个功能,但是如果我编写这个函数并将其链接到我的代码,我该怎么做,它已经存在于libc中了?我的链接器或编译器是否允许我基本上定义我自己的函数版本,还是我必须给它另一个名字?如果有一种方法可以重用相同的名称,那将是非常方便的,因此如果strcpy()存在于用户的libc中,他们可以使用它,但如果它们的libc中不存在,则可以使用我的版本,而只需使用少量代码尽可能地改变.

简短版本:

a)当我编写与内置函数同名的自己的函数时会发生什么?

b)我可以做些什么来避免在strdup()没有重写我的所有代码而不使用的平台上发生的不良事情strdup(),这有点单调乏味?

c strdup

15
推荐指数
3
解决办法
2万
查看次数

C中的'memdup'功能?

在C中,您可以使用strdup简洁地分配缓冲区并将字符串复制到其中.然而,据我所知,一般记忆没有类似的功能.例如,我不能说

struct myStruct *foo = malloc(sizeof(struct myStruct));
fill_myStruct(foo);

struct myStruct *bar = memdup(foo, sizeof(struct myStruct));
// bar is now a reference to a new, appropriately sized block of memory,
//   the contents of which are the same as the contents of foo
Run Code Online (Sandbox Code Playgroud)

那么,我的问题有三个:

  1. 是否有一些我不知道的标准库函数?
  2. 如果没有,是否有一个简洁的,最好是标准的方法来做到这一点,没有明确的调用mallocmemcpy
  3. 为什么C包括strdup但不包括memdup

c strdup memcpy

13
推荐指数
3
解决办法
8739
查看次数

我如何使用strdup?

我正在调用strdup,必须在调用之前为变量分配空间strdup.

char *variable;
variable = (char*) malloc(sizeof(char*));
variable = strdup(word);
Run Code Online (Sandbox Code Playgroud)

我这样做了吗?或者这里有什么问题吗?

c malloc strdup

12
推荐指数
3
解决办法
4万
查看次数

我应该在 C 中的 basename/dirname 之后释放 strdup 指针吗?

我想使用 POSIX 的basename功能(而不是 GNU 的)。

从手册页:

dirname() 和 basename() 都可以修改 path 的内容,因此在调用这些函数之一时可能需要传递一个副本。

这些函数可能会返回指向静态分配的内存的指针,这些内存可能会被后续调用覆盖。 或者,它们可能会返回指向 path 某些部分的指针,以便在不再需要函数返回的指针之前,不应修改或释放 path 引用的字符串。

它还说:

返回值
dirname() 和 basename() 都返回指向以空字符结尾的字符串的指针。(不要将这些指针传递给 free (3)。)

因此,该示例建议如下:

例子

       char *dirc, *basec, *bname, *dname;
       char *path = "/etc/passwd";

       dirc = strdup(path);
       basec = strdup(path);
       dname = dirname(dirc);
       bname = basename(basec);
       printf("dirname=%s, basename=%s\n", dname, bname);
Run Code Online (Sandbox Code Playgroud)

strdupstrndup)手册页说:

新字符串的内存通过 malloc(3) 获得,并且可以通过 free(3) 释放。

所以问题是:我应该释放 dirc 和 basec(按照strdup)还是不释放(按照basename)?

c memory string malloc strdup

9
推荐指数
1
解决办法
3105
查看次数

strdup的替代方案

我正在为包含名称的书写一个C++类:

class Book {
private:
    char* nm;
..........
............
..........
...........
};
Run Code Online (Sandbox Code Playgroud)

我不被允许std::string在这项任务中使用.所以我在这里strdup用来将参数名称的值复制到构造函数中的nm:

Book::Book(const char *name, int thickness, int weight)
    : nm(NULL)
    , thck(thickness)
    , wght(weight)
{
    if (name)
        nm = strdup(name);
}
Run Code Online (Sandbox Code Playgroud)

是否有替代方法可以在不使用的情况下实现相同的结果strdup,而是使用关键字new

c++ string strdup dynamic-memory-allocation

6
推荐指数
2
解决办法
1万
查看次数

strdup和内存泄漏

strdup是否每次都分配另一个内存区域并创建另一个指针?

例如:以下代码是否导致内存泄漏?

void x(char** d, char* s){
    *d = strdup(s);
}

int main(){
    char* test = NULL;
    x(&test, "abcd");
    x(&test, "etc");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c memory-leaks strdup

6
推荐指数
2
解决办法
7443
查看次数