strcpy的实现问题。。。。

问题描述

strcpy的实现问题。。。。

char*strcpy(char *s1, char *s2)
{
char*temp = s1;
while (*s2 != '')
{
*s1++ = *s2++;
}
s1 = '';
return temp;
}


为什么一运行到*s1++=*s2++就出错。新人求教

解决方案

main函数中修改:
char *s1="abc"; s1指向静态常量存储区域,一般不允许通过指针修改

    char s1[]="abc", s2[]="def";

解决方案二:

#include<stdio.h>
//strcpy 的实现
char* strcpy1(char *s,char *t)
{
? ?char *temp = s ; ?
? ?while((*s++ = *t++))
? ;
? ?return temp;......
答案就在这里:strcpy实现 空指针的问题。

解决方案三:

 #include"stdio.h"
char*strcpy(char *s1, char *s2)
{
    char*temp = s1;
    while (*s2 != '')
    {
        *s1++ = *s2++;
    }
    *s1 = '';//修改
    return temp;
}

int main()
{
    char str1[20],str2[20]="i love vc";
    strcpy(str1,str2);
    printf("%s
",str1);
}

解决方案四:

 #include<iostream>
using namespace std;
int strcmp(char *s1, char *s2)
{
    while (*s1 != ''&&*s2 != ''&&*s1 == *s2)
    {
        s1++;
        s2++;
    }
    return *s1 - *s2;
}
char*strcpy(char *s1, char *s2)
{
    char*temp = s1;
    while (*s2 != '')
    {
        cout << *s1 << endl;
        *s1++ = *s2++;
    }
    *s1 = '';
    return temp;
}
char*strcat(char *s1, char *s2)
{
    char*temp = s1;
    while (*s1 != '') s1++;
    while (*s2 != '')
    {
        *s1++ = *s2++;
    }
    *s1 = '';
    return temp;
}
int strlen(char *s1)
{
    int i = 0;
    for (i = 0; s1[i] != ''; i++);
    return i;
}
void main()
{
    char*s1="abc", *s2="def";
    cout << "strlen(s1)=" << strlen(s1) << endl;
    cout << "strlen(s2)=" << strlen(s2) << endl;
    cout << "strcmp(s1,s2)=" << strcmp(s1, s2) << endl;
    cout << "strcpy(s1,s2)=" << strcpy(s1, s2) << endl;
    cout << "strcat(s1,s2)=" << strcpy(s1, s2) << endl;
}
时间: 2024-10-28 11:17:09

strcpy的实现问题。。。。的相关文章

关于strcpy的问题,求解答

问题描述 关于strcpy的问题,求解答 将第二个字符串复制到第一个字符串时第一个字符串后面的长于第二个字符串的字符会收到影响吗 如第一个字符串是a[15]="how do you do"第二个字符串是"what is it"输出a时还有后面的do吗 解决方案 复制的时候是连一起复制的,所以复制的结果是 what is itdo... 如果你用printf去输出,它输出到就为止了,不再输出后面的东西. 从内存的角度讲,还在,但是显示的时候没了. 解决方案二: 很好的

C语言中字符串常用函数strcat与strcpy的用法介绍

以下是对C语言中字符串常用函数strcat与strcpy的使用方法进行了详细的分析介绍,需要的朋友可以参考下   strcpy原型声明:extern char *strcpy(char* dest, const char *src);头文件:#include <string.h>功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串. 返回指向dest的指针.函数实现: 复制代

c语言-strcpy和strcat的使用问题,搞不懂为什么出现这样的错误?怎么改呢》?

问题描述 strcpy和strcat的使用问题,搞不懂为什么出现这样的错误?怎么改呢>? int _tmain(int argc, _TCHAR* argv[]) { char n; CString strTime; // 用于将CTime对象格式化为字符串 CTime curTime = CTime::GetCurrentTime(); cout<<GetExePath()<<endl; /*cout<<"请输入要删除几天前的文件夹:"; c

c++-关于strcpy和strcpy_s

问题描述 关于strcpy和strcpy_s char * hobby;char * ho=""safafaf"";hobby=new char[strlen(ho)+1];strcpy(hobbyho);这里为什么只能用strcpy不能用strcpy_s? 解决方案 s?t?r?c?p?y_s需要三个参数,第二个参数指定长度防止越界,而strcpy只需要两个参数. 解决方案二: 为了减少溢出的可能,_s出来了.可是为了移植,它不通用,问题又出来了.??......

指针- C语言的strcpy函数 拷贝之后再打印

问题描述 C语言的strcpy函数 拷贝之后再打印 比如将s的内容复制到n char *s="hello world"; char *n; strcpy(n,s); 之后再打印n的内容,如果是printf("%s",n);的话 结果就是"hello world" 但是如果是逐个打印 for(int i=0;i<strlen(n);i++){ printf("%c",n[i]); } 运行时会出现Segmentation

指针地址-实现自己的strcpy函数是遇到的问题

问题描述 实现自己的strcpy函数是遇到的问题 最近在看 C和指针 在做第9章第3个编程题时,遇到了一个奇怪的问题,原题如下 编写一个名叫my_strcpy的函数,它类似于strcpy函数,但它不会溢出目标数组.复制的结果必须是一个真正的字符串. 我在centos上编写了程序: #include <stdio.h> char *my_strcpy(char *buff, const char *str, int buffLen) { char *temp = buff; while ((te

c++-编写一段C++程序,利用strcpy和strcat

问题描述 编写一段C++程序,利用strcpy和strcat 编写一段C++程序,定义两个字符数组并用字符串字面值初始化他们; 接着再定义一个字符数组存放前两个数组连接后的结果.使用strcpy和strcat把前面两个数组的内容拷贝到第三个数组中. 解决方案 #include "stdafx.h" #include "string.h" int _tmain(int argc, _TCHAR* argv[]) { char buf1[] = "hello&

strcpy函数&amp;amp;#39;\0&amp;amp;#39; 要不要拷贝过去

问题描述 strcpy函数'' 要不要拷贝过去 char * CJStrCpy(char *pDest, const char *pSrc) { if(NULL != pDest && NULL != pSrc) { char *pTemp = pDest; while('' != *pSrc) { *pTemp++ = *pSrc++; } } return pDest; } 解决方案 C字符串结尾有'',所以是需要的. 解决方案二: 当然要,字符数组之所以能保存字符串,就是因为最后一个

strcpy函数赋值时遇到问题

问题描述 strcpy函数赋值时遇到问题 char string[7]; char* str1 = "0123456789"; printf("%s",strcpy( string, str1 )); 为什么数组string的空间小于 字符串"0123456789",但是依然输出0123456789: 还有strcpy函数是以什么方式进行赋值的? 解决方案 (1)在运行该代码时,提示Debug Error:Run-Time Check Failu