Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 拥有strncpy()C++;_C++_Arrays_Strncpy - Fatal编程技术网

C++ 拥有strncpy()C++;

C++ 拥有strncpy()C++;,c++,arrays,strncpy,C++,Arrays,Strncpy,我正在尝试实现我自己版本的strncpy(),我从中找到了一个源代码 但在练习2.exe中,我在0x00411ad5处遇到了一个未处理的异常:0xC0000005:访问冲突写入位置0x00417800。每次代码到达此代码时((x++

我正在尝试实现我自己版本的strncpy(),我从中找到了一个源代码

但在练习2.exe中,我在0x00411ad5处遇到了一个
未处理的异常:0xC0000005:访问冲突写入位置0x00417800。
每次代码到达此代码
时((x++

以下是完整的代码:

char *strncpy(char * destination, const char * source, size_t n){
        char *dest;
        dest = destination;

        size_t x=0;
        while((x++ < n) && (*dest++  = *source++)); //this is where unhandled exception occurs
        while(x++ < n){
            *dest++ = 0;
        }

        return dest;
    }

int main(){
    char *sample = "blue";
    char * sample2 = "red";

    cout << strncpy(sample, sample2, 5);
    getch();
    return 0;
}
char*strncpy(char*目的地,const char*源,大小){
char*dest;
目的地=目的地;
尺寸x=0;
while((x++无法写入字符串常量(
sample
);请改为写入
char
数组:

int main(){
    char *sample = "blue";
    char buffer[5];

    cout << strncpy(buffer, sample, sizeof(buffer));
    getch();
    return 0;
}
intmain(){
char*sample=“蓝色”;
字符缓冲区[5];
cout您的目标是
“blue”
,这是一个字符串文字,是一个常量。因此,它位于内存的只读部分(由本地
示例
变量指向),因此在写入时会出错

试试这个:

int main(){
    char sample[] = "blue";
    char * sample2 = "red";

    cout << strncpy(sample, sample2, 5);
    getch();
    return 0;
}
intmain(){
字符样本[]=“蓝色”;
char*sample2=“红色”;

cout首先,已经向您解释过不能覆盖这样定义的字符串。

第二,你不能使用cout你的程序有两个主要问题 第一个是函数
strncpy
必须返回
destination
,而不是
dest

char *strncpy(char * destination, const char * source, size_t n){
        char *dest;
        dest = destination;

        size_t x=0;
        while((x++ < n) && (*dest++  = *source++)); //this is where unhandled exception occurs
        while(x++ < n){
            *dest++ = 0;
        }

//        return dest;
        return destination;
    }

您无法覆盖为文字保留的内存。发生错误的原因是您写入了只读字符串,
sample
。您不是想返回
目标
,而不是已超过末尾的
dest
?谢谢,异常已得到解决。但输出有点奇怪。它没有复制插入的内容ide示例2,它给出了奇怪的符号。->已解决,返回时出错,应该返回目标而不是指针。“无法使用
您是否意识到我们讨论的是问题中的代码?该代码返回递增的dest,而不是destinationrue问题的代码现在执行此操作,但考虑到编写“我自己版本的strncpy()”的目的”-在返回
dest
之前,它仍然存在错误,一旦修复返回
dest
cout
将开始工作。尽管现有实现中存在额外的错误,但这一点很好。
int main(){
    char sample[] = "blue";
    char * sample2 = "red";

    cout << strncpy(sample, sample2, sizeof( sample ) );

    getch();

    return 0;
}
char * strncpy( char *destination, const char *source, size_t n )
{
        char *dest = destination;

        while ( n-- && ( *dest++  = *source++ ) );
        while ( n-- ) *dest++ = '\0';

        return destination;
}