相关疑难解决方法(0)

为什么strlcpy和strlcat被认为是不安全的?

据我所知,strlcpystrlcat被设计为安全的替代品strncpystrncat.然而,有些人仍然认为他们不安全,只是造成不同类型的问题.

有人可以举例说明如何使用strlcpystrlcat(即一个总是 null终止其字符串的函数)会导致安全问题吗?

Ulrich Drepper和James Antill表示这是事实,但从未提供实例或澄清这一点.

c security strncpy strlcpy

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

如何在C中复制char数组?

在C中,我有两个char数组:

char array1[18] = "abcdefg";
char array2[18];
Run Code Online (Sandbox Code Playgroud)

如何复制的价值array1array2?我可以这样做array2 = array1吗?

c arrays copy char

68
推荐指数
5
解决办法
38万
查看次数

将字符串分配给字符数组

我对以下内容感到有些惊讶.

例1:

char s[100] = "abcd"; // declare and initialize - WORKS
Run Code Online (Sandbox Code Playgroud)

例2:

char s[100]; // declare
s = "hello"; // initalize - DOESN'T WORK ('lvalue required' error)
Run Code Online (Sandbox Code Playgroud)

我想知道为什么第二种方法不起作用.它应该是自然的(它适用于其他数据类型)?有人能解释一下这背后的逻辑吗?

c

65
推荐指数
3
解决办法
19万
查看次数

为什么strncpy不安全?

我想找出为什么strncpy被认为是不安全的.有没有人有关于此的任何文档或使用它的漏洞利用示例?

c c++ string strncpy

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

如何将char*复制到字符串中,反之亦然

如果我将char*传递给函数.我想把那个char*转换为std :: string,一旦我得到我的结果,就从std :: string将它转换回char*来显示结果.

  1. 我不知道如何为转换做这个(我不是在谈论const char*而只是char*)
  2. 我不知道如何操纵我发送的指针的值.

所以我需要做的步骤

  1. 接受一个炭*
  2. 将其转换为字符串.
  3. 获取该字符串的结果并以char*的形式将其放回
  4. 返回结果,使得值应该在函数外部可用而不会被破坏.

如果可能的话,我可以看看如何通过引用vs一个指针来完成它(它的地址我通过值传入但是我仍然可以修改指针所指向的值.所以即使函数中指针地址的副本被破坏了我仍然看到外面的变化值.

谢谢!

c++

28
推荐指数
1
解决办法
8万
查看次数

查找字符串的所有唯一排列而不生成重复项

查找字符串的所有排列是通过众所周知的Steinhaus-Johnson-Trotter算法.但如果字符串包含重复的字符,如
AABB,
那么可能的唯一组合将是4!/(2!*2!)= 6

实现这一目标的一种方法是我们可以将它存储在数组中,然后删除重复项.

有没有更简单的方法来修改约翰逊算法,因此我们永远不会生成重复的排列.(以最有效的方式)

c algorithm combinatorics

21
推荐指数
3
解决办法
8649
查看次数

strncmp优于strcmp的优势?

似乎strncmp通常建议比strcmp,有什么优势?我认为这可能与安全有关.如果是这种情况,如果已知其中一个输入字符串是字面常量,它仍然适用"LiteralString"吗?

更新: 我的意思是在需要比较整个字符串的相同用户场景下,strncmp可以如下使用.我想知道它是否有意义.

strncmp(inputString, "LiternalString", strlen("LiternalString"));
Run Code Online (Sandbox Code Playgroud)

c c-standard-library

11
推荐指数
4
解决办法
2万
查看次数

在C中复制字符串的一部分

这似乎应该非常简单,但出于某种原因,我没有让它工作.我有一个名为seq的字符串,如下所示:

ala
ile
val
Run Code Online (Sandbox Code Playgroud)

我想取前3个字符并将它们复制到不同的字符串中.我使用命令:

memcpy(fileName, seq, 3 * sizeof(char));
Run Code Online (Sandbox Code Playgroud)

这应该是fileName = "ala",对吧?但出于某种原因,我明白了fileName = "ala9".我正在解决这个问题fileName[4] = '\0',但我想知道为什么我会得到那个9.

注意:将seq更改为

ala
ile
val
ser
Run Code Online (Sandbox Code Playgroud)

并重新运行相同的代码,fileName成为"alaK".不再是9,但仍然是一个错误的角色.

c string

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

为什么C中的strcpy不安全?

我是初学者,我正在学习如何在C中复制字符串.

这是我刚遇到的一个问题:

每次我尝试使用"strcpy"命令从字符串1复制到字符串2时,Visual Studio 2013会给我一条错误/警告消息,说"strcpy"不安全,建议我改用strcpy_s.

你能解释一下为什么使用strcpy不安全吗?什么是strcpy的更安全的替代品?

这是我的代码:

#include<stdio.h>
#include<string.h>
main()
{
    char str1[] = "Copy a string.";
    char str2[15];
    char str3[15];
    int i;

    /* with strcpy() */
    strcpy(str2, str1);
    /* Without strcpy() */
    for (i = 0; str1[i]; i++)
        str3[i] = str1[i];
    str3[i] = '\0';
    /* Display str2 and str3 */
    printf("The content of str2: %s\n", str2);
    printf("The content of str3: %s\n", str3);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

PS我在Windows 7 64位终极版上使用Visual Studio 2013 64位终极版.感谢您的时间!

c string strcpy

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

snprintf和朋友可以安全使用吗?

最近有一个关于SO的问题(为什么有人会使用strncpy而不是strcpy?),这是hade的答案(答案1,答案2),这使我不确定其他字符串函数的名字中带有'n',如snprintf(我一直在广泛使用).snprintf可以安全使用吗?一般来说,'n'家族的安全功能是什么?

c printf buffer-overflow

4
推荐指数
1
解决办法
8244
查看次数