标签: strcpy

dest缓冲区小于src缓冲区时的strcpy

我试图了解strcpy和strncpy的区别/缺点.有人可以帮忙:

void main()
{
char src[] = "this is a long string";
char dest[5];

strcpy(dest,src) ;
printf("%s \n", dest);
printf("%s \n", src);

}
Run Code Online (Sandbox Code Playgroud)

输出是:

this is a long string 
a long string 
Run Code Online (Sandbox Code Playgroud)

问题:我不明白,源sting是如何被修改的.根据解释,strcpy应该继续复制,直到它遇到'\ 0',所以它确实如此,但为什么"src"字符串被修改.

请解释.

c string buffer-overflow strcpy

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

为什么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万
查看次数

在以下上下文中指针和数组有什么区别?

#include <cstring>
int main()
    {
    char *pName = new char[10];
    char dummy[] = "dummy";
    strcpy(pName + 0,dummy);//how this is different from -->this works
    strcpy(pName[0],dummy);//this one...--> error C2664: 'strcpy' : 
                           //cannot convert parameter 1 
                           //from 'char' to 'char *'

    }
Run Code Online (Sandbox Code Playgroud)

c++ arrays pointers strcpy

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

strcpy字符串数组

char copy, array[20]

    printf("enter ..."):
    scanf("%s", array);

    if (strlen(array) > 20 ) 
      { 
       strcpy(copy, array....); 
Run Code Online (Sandbox Code Playgroud)

如果输入超过20个字符,我需要做什么才能使它只抓取前20个字符

c strcpy

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

strcpy 导致 EXC_BAD_ACCESS?

我正在使用 Xcode 4 制作一个命令行工具。

我在 strcpy 线上收到 EXC_BAD_ACCESS 错误:

char *invalidOption = NULL;
strcpy(invalidOption, argv[2]);
Run Code Online (Sandbox Code Playgroud)

argv[1] 是 -v (“有效”选项),argv[2] 是 -z (“无效”选项)。

然后,出于显示原因,我需要更改“invalidOption”(打印“错误”消息)。

关于为什么会发生这种情况有什么想法吗?如果您需要更多详细信息,请告诉我。

program-entry-point exc-bad-access objective-c strcpy xcode4

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

libc函数“ strcpy()”是否调用任何系统调用?

我想知道是否有不调用任何syscall()的libc函数?例如,对于libc函数“ strcpy()”,是否需要任何syscall调用(让我们考虑所有可能的linux系统)。

posix libc system-calls strcpy

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

数组和指针之间的区别

昨天我在自制的"strcpy"功能上遇到了一些麻烦.虽然现在有效,但我有点困惑!

char* a = "Hello, World!"; //Works
char b[] = "Hello, World!"; //Works also

strcpy(a, "Hello!"); //Segmentation fault
strcpy(b, "Haha!!"); //Works..
Run Code Online (Sandbox Code Playgroud)

区别在哪里?为什么char指针会导致"分段错误"?

为什么这甚至有效?:

char* a = "Haha"; //works
a = "LOL"; //works..
Run Code Online (Sandbox Code Playgroud)

c arrays pointers strcpy

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

用strncpy替换strcpy

假设我有一些遗留代码是使用对C STL函数的不安全调用编写的strcpy.我们都知道这strcpy是不安全的,因为它使程序容易受到缓冲区溢出问题的影响.假设我要将所有调用替换为strcpy调用strncpy.一种用于替换所有技术调用strcpy(dest, src)将涉及调用strncpy与参数(dest, src, length of dest - 1),然后终止dest\0.我知道这个问题是我们并不总是知道它的长度,dest因为它可能是指向堆上分配的内存的指针.

我们假设我可以计算出dest每个呼叫站点的长度.我可以取代所有调用strcpy与调用strncpy,这将保证我的计划是不受缓冲区溢出攻击(至少从使用不当的strcpy).但是,这种方法可能会以不合需要的方式默默地截断数据并改变程序行为.这比检测截断和中止程序更好吗?或者是允许截断还是记录它更好吗?

我是从有兴趣开发修补遗留代码的自动方法的人的角度问的.有没有人对如何最好地解决这个问题有任何想法?

c c++ security stl strcpy

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

函数strcpy()改变整数数组的值?

我将从我目前的代码开始,其中输入是用户提供的变量:

int current[2] = {-1, -1}, next[2] = {-1, -1};
char *strtok_result = strtok(input, " ");
int i = 0;
while(strtok_result != NULL){
    i++;
    int count = 0;
    char strtok_buffer[2];
    printf("iteration %d-%d: next[0] = %d\n", i, ++count, next[0]);
    strcpy(strtok_buffer, strtok_result);
    printf("iteration %d-%d: next[0] = %d\n", i, ++count, next[0]);

    current[0] = next[0];
    current[1] = next[1];
    next[0] = strtok_buffer[1] - 48;            // ascii conversion, digit to column
    next[1] = toupper(strtok_buffer[0]) - 64;   // --- || ---, letter to row
    printf("iteration …
Run Code Online (Sandbox Code Playgroud)

c memory arrays strcpy

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

如何将当前的 strcpy 转换为 strcpy_s?

我有一个strcpy到处都在使用的大型项目。我正在考虑使用strcpy_s而不是strcpy. 我想我已经使用了近 10,000 次strcpy。每次都换好麻烦strcpy。有什么有效的转换方法吗?

c string strcpy

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