鱼C论坛

 找回密码
 立即注册
查看: 3835|回复: 10

关于strcpy和指针的问题

[复制链接]
发表于 2012-2-23 00:14:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 jialebihaidai 于 2012-2-23 19:45 编辑

今天写了一个strlen函数的时候遇到的问题

#include<stdio.h>

main()
{
        char *str1 = "abcde";
        char *str2;

        strcpy(str2, str1);
        printf("%s", str2);
}

运行出错,好像是内存的问题,是不是因为 str1 和 str2 指向同一段内存了?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-23 11:29:59 | 显示全部楼层
printf("%s", str2);改成printf("%s", *str2);试试
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-23 12:45:37 | 显示全部楼层
str2  这里是野指针。指向哪里?。
使用前必须先指向安全的内存,。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-23 12:57:52 | 显示全部楼层
本帖最后由 「hailmy」 于 2012-2-23 12:59 编辑

我写的是这样。。。
#include <stdio.h>
#include <string.h>        //strcpy 头文件
#include <stdlib.h>        //malloc 头文件

int main()
{
        char *str1 = "abcde";
        char *str2;
        str2 = (char *)malloc( sizeof(str1));        //初始化  str2
        int i = 0;        

        strcpy(str2, str1);
        printf("%s\n", str1);
        
        //计算str2 长度
        while (*(str2+i) != '\0')
                i++;

          printf("%d\n", i);

        return 0;
}

/*
输出结果:
----------------------------------------
abcde
5
Press any key to continue
----------------------------------------
*/
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-24 15:45:07 | 显示全部楼层
ls好  我把你写的 用Microsoft Visual C++ 6.0 编译了一遍 不能通过  把int i=0;  放在void main 的外面  才可以编译通过 正常运行 请问是为什么呢
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-24 15:59:34 | 显示全部楼层
本帖最后由 风扫地 于 2012-2-24 16:01 编辑

他是以C++的语法编译的。。。你编译他上面的代码需要把文件后缀名改成 .cpp
..如果后缀名是.c的话需要将所有变量的定义放在函数的开始处或者外面。。比如


void  main()
{
     int i=0;
    printf("%d",i);  //正确
}


void  main()
{
  printf("Hello World!");
   int i=0;    //以.c格式编译就会报错。。。改为.cpp格式能编译通过   printf("%d",i);
}
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-24 17:38:04 | 显示全部楼层
#include <stdio.h>
#include <string.h>
#include "malloc.h"
#define max 50   //随便弄个空间出来

/*Main program*/

int main (void)
{
     char *str1 = "abcde";
     char *str2;
         
         str2 = (char *)malloc(max*sizeof(char));

     strcpy(str2, str1);
     printf("%s\n", str2);
}

第二个指针 它只是一个字符指针变量并不是数组 ,即它没有指向内存空间 所以字符串肯定放不进去   
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-24 20:53:29 | 显示全部楼层
风扫地 发表于 2012-2-24 15:59
他是以C++的语法编译的。。。你编译他上面的代码需要把文件后缀名改成 .cpp
..如果后缀名是.c的话需要将 ...

谢谢~!哎呀 还有十字限制
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-24 21:01:07 | 显示全部楼层
楼主不明白这个错误的主要原因是不明白
char *str;

char str[100]
的区别。
前者只定义了一个指针对象, 后者则是定义了100个char类型的单元。
你将一串字符 传给 一个指针, 自然会内存出错了。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-3-6 22:15:11 | 显示全部楼层
#include <stdio.h>
#include <string.h>        //strcpy 头文件
#include <stdlib.h>        //malloc 头文件

int main()
{
        char *str1 = "abcde";
        char str2[10];
        int i = 0;        
        strcpy(str2, str1);
        printf("%s\n", str2);
        
        //计算str2 长度
        while (*(str2+i) != '\0')
                i++;
          printf("%d\n", i);
        return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-3-6 22:16:46 | 显示全部楼层
野指针,初学者常犯的错误,内存管理,慢慢再研究吧,也可以申请内存在使用,
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-11 13:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表