问题标签 [strdup]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
674 浏览

c - 使用 strdup 从字符串转换的 c++ char* 不等于原始原始字符串

我想知道为什么将字符串转换为 char* 似乎会使新的 char* 不等于它来自的文字字符串。

如果我有:

产生:

所以转换后的 char* 仍然等于它来自的原始字符串。但由于某种原因char* s_convert,它不等于它来自的文字字符串,尽管原始字符串string s

为什么会这样?有没有更好的方法可以将字符串转换为不会导致这种情况的 char*?

0 投票
1 回答
331 浏览

strdup - 将 _strdup 替换为 _strdup

我在 VS2013 上收到以下编译错误:

所以它要求我用同样的东西替换“_strdup”。

我看到很多错误要求用 strdup 替换 _strdup (POSIX),但不是那样。

同样的代码也适用于许多其他人的机器(通常具有相同的项目属性)。所以我认为我不需要更改代码,而是我的 PC 上的一些东西。

任何的想法 ?

0 投票
1 回答
3357 浏览

c - C - 尝试使用 strdup 时出现段错误

我过去使用 strdup() 的方式与在这里使用它的方式相同。我将 token2 传递给 strdup,它的类型为 char *,其中有一个有效的指针,但是当我尝试运行“name = strdup(token2);”行时 我的程序段错误,我很不确定为什么。如果有人能够帮助我,将不胜感激。我也意识到我的代码还没有返回正确的类型,我仍在努力编写所有代码。

0 投票
1 回答
4660 浏览

c - = 的操作数具有非法类型

我对C很陌生(多年后)。我正在使用 lcc64 并有以下声明

我不知道为什么我会收到错误

有什么建议么?

0 投票
1 回答
125 浏览

c - list[idx] = strdup(tok[1] +tok[2]) 或初始 malloc 到列表的大小 -C

我有一个在 valgrind 中写入无效的代码。我试图做的是strcat我malloc'd的idx。我想知道 strdup() 的大小,以便我可以在 char *argv[] 中的标记数之间放置空格。

这是一小段代码

如果您对如何从 getline 收集令牌的大图感兴趣,您可以在此处查看问题https://stackoverflow.com/questions/27394313/getline-loop-for-stdin-has-segmentatoin-fault-after-每个循环-c

是我目前能做的最好的

解决它

0 投票
2 回答
84 浏览

c - 在 C 中复制作为参数传递给函数的字符串

我想不出我的问题的正确标题,所以就这样吧。我正在尝试学习 C,以下代码来自我正在关注的教程。

我的问题是Person_create功能为什么我们要复制name到新的内存位置who->name。为什么我们不能只who->name指出*name提供给函数的相同位置。
此外,如果我们直接分配了*nameto who->namedo 的地址,我们必须将其释放到Person_destroy.

0 投票
1 回答
643 浏览

c - 使用 SDL_strdup 和类似方法获取文件名的问题

我正在尝试使用 SDL2 创建一个程序。
在代码的某个部分,我正在编写函数来获取给定目录路径中所有当前文件的名称(并将它们保存在内存中),以便在另一个函数中,我可以检查指定文件是否最后出现检查目录的那一刻。我正在使用dirent.h以满足我的需求,但我遇到了一些问题:

  1. 所有文件都被正确捕获readdir()(没有例外),但是在使用后它们并不总是正确复制到内存中SDL_strdup()(代码如下)。
  2. 我使用SDL_malloc()//尽可能跨平台以避免在移植代码时出现问题(因为我已经读过 strdup 不是 C 标准)SDL_realloc()SDL_strdup()

这是我的代码:

}

输出不同。当它不崩溃时,我要么正确复制所有文件名,要么复制大部分文件名,其中一些不包含任何内容或纯乱码(如评论);如果它确实崩溃了,有时我在使用时会出现 Segfault,有时在使用SDL_strdup()时会出现 Segfault closedir()

我什至考虑过通过给它提供文件数量(感谢另一个函数)来SDL_realloc()用初始内存分配交换场景,但我遇到了同样的问题。filelist->files

任何将我的编码风格更改为更具防御性的风格的建议(因为我确实相信这种风格相当危险)将不胜感激,尽管我已经为这种情况尽我所能。我目前正在使用内置 gcc Apple LLVM 6.0 (clang-600.0.56) 开发 Mac OS X。

0 投票
2 回答
3502 浏览

c - 复制char数组时strdup是否添加了'\ 0'?

如果 src 数组不包含一个,我想知道 strdup 是否在新数组的末尾添加一个 '\0' ?

假设我们有一个包含由这种 malloc 分配的“hello”的数组

所以 5 个字节对应 5 个字符。

我猜 src 字符串没有为 '\0' 接收到足够的内存。

在这种情况下应该发生什么?

0 投票
3 回答
170 浏览

c - char *str="this is a string" from char *str = strdup("this is a string") 在 C 中有什么区别

以下代码有什么区别:

char* str = "this is a string"

从这个:

char* str = strdup("this is a string")

使用场景?

0 投票
1 回答
3674 浏览

c - 从 flex/bison 中释放 strdup() 中分配的字符串

我有使用strdup().

strdup()分配内存并将输入字符串复制到其中并返回(strdup() - 它在 C 中做了什么?),所以我想当我不再需要它时需要释放它。

来自这篇文章:什么时候在 BISON 中调用 %destructor?,我%destructor { free($$); printf("free");} STRING在yacc文件中添加了。

但是,free()即使yylval.sval分配了从strdup().

可能有什么问题?如何释放 flex/bison 中分配的字符串?

添加

我考虑使用静态分配的 sval 如下:

弹性代码现在变为(如果 yytext 小于 100 字节,则没有检查代码):

我不确定这种方法是否是人们通常使用的方法。

添加2

对于我的申请,简单的实习是可以的。

对于 yacc 代码