各位高手哥哥,高手姐姐帮助一下解决一个C指针问题,小弟感激不尽
这道题题目为:
一字符串,包含N个字符,写一个函数,将此字符串中从第M个字符开始的全部字符复制成为另一个字符串。(要求必需用指针完成)
(而我是这样做的,请问为什么不可以呢?)
char *cop(char *f,int n)
{char *k;
k=f+n-1;
return(k);}
main()
{char a[80],a1[80],*from,*to,*k;
int m;
from=a;
to=a1;clrscr();
printf("please input a string:\n");
scanf("%s",from);
printf("\n");
printf("please input the number you want to copy:\n");
scanf("%d",&m);
printf("\n");
to=*cop(from,m);
printf("%s",to);
}
顺便再问一下,为什么指针输入以下两种一种可以而一种就不可以呢?
int *p;
scanf("%d",p);
而另一种就不可以了
float *p;
scanf("%f",p);
这中只能用
float *p;
scanf("%f",&*p);
才可以这是为什么呀??
谢谢了,小弟感激不尽!!!!1
问题点数:20、回复次数:8Top
1 楼bm1408(向va_list学习~不用VC好多年~)回复于 2004-05-04 09:43:22 得分 0
char *cop(char *f,int n)
{char *k;
k=f+n-1;
return(k);}
你的代码我没有仔细的看,但是这一点就不对,你返回了一个指向站内存的指针!Top
2 楼bm1408(向va_list学习~不用VC好多年~)回复于 2004-05-04 09:51:31 得分 0
int *p;
scanf("%d",p);
float *p;
scanf("%f",p);
按理说这样的处理方法都是不正确的,因为你只是定义了一具指针,却没有具体的让他有一个指向!至所以第一个正确,我想是和计算机处理整数的方法和浮点数的不同有关!浮点数不但有大小的限制,还有精度的控制!
最好不要这样做
int a=0;
scanf("%d",&a);
int *p=&a;
这样不是很好吗!Top
3 楼liem(阿明)回复于 2004-05-04 09:55:36 得分 0
char *cop(char *f,int n)
{char *k;
k=f+n-1;
return(k);}
要求是复制。你这样做,仅返回了指向f第n个字符的指针,如果f内容变了,那么返回的结果也会变化,不能达到“复制”的目的。在你的主函数中再添加二句:
scanf("%s",from);
printf("\n%s",to);
试试。
顺便再问一下,为什么指针输入以下两种一种可以而一种就不可以呢?
int *p;
scanf("%d",p);
而另一种就不可以了
float *p;
scanf("%f",p);
这中只能用
float *p;
scanf("%f",&*p);
才可以这是为什么呀??
这些做法都有问题,没有具体指向的指针是不能使用的,使用会出问题,在赋值前要为指针确定其指向。
Top
4 楼zxs790501(沧海一粟)回复于 2004-05-04 12:29:58 得分 0
#include <stdio.h>
#define N 30
#define M 10
void Copy(char & from, char & to, int m)
{
for(int i = 0; i < n-m+1)
to[i] = from[i+m-1];
to[i] = '\0';
}
void main()
{
char a[N] = "";
scanf("%s",a);
char b[N-M+1] = "";
Copy(a,b,M);
printf("%s",b);
}
Top
5 楼bnbn3(对着天小声说一声:他奶奶的)回复于 2004-05-05 12:53:58 得分 10
我给你改的,以编译通过.记的给我分.
int cop(char *f,int n)
{char *k;
k=f+n-1;
return(k);}
main()
{char a[80],a1[80],*from,*to,*k;
int m;
from=a;
to=a1;clrscr();
printf("please input a string:\n");
scanf("%s",from);
printf("\n");
printf("please input the number you want to copy:\n");
scanf("%d",&m);
printf("\n");
to=(char*)cop(from,m);
for(;*to!='\0';to++)
printf("%c",*to);
}Top
6 楼FreeFice(庄鱼)回复于 2004-05-05 13:20:27 得分 10
char* cop(char* to,const char*from,int max,int pos)
{
for(int i=0,j=pos-1;j<max && *(from+i);i++,j++)
*(to+j) = *(from+i);
return to;
}
int main()
{
char a[80],a1[80],*from,*to,*k;
int m;
from=a;
to=a1;clrscr();
printf("please input a string:\n");
scanf("%s",from); //建议用gets代替scanf("%s")
printf("\n");
printf("please input the number you want to copy:\n");
scanf(" %d",&m);
printf("\n");
printf("please input other string:\n");
scanf("%s",to);
to=cop(to,from,80,m);
printf("%s",to);
return 0;
}
Top
7 楼Wolf0403(废人:独活十年~心如刀割)回复于 2004-05-05 13:56:25 得分 0
复制成为另一个字符串??还是复制到?如果是“到”不就是 strncpy 吗。。。
否则
char * dump_str(const char * str, size_t M, size_t N)
{
char * rt = (char *)malloc(sizeof(char) * (M - N));
if (rt != 0)
{
for (N -= M; N != -1; --N)
rt[N] = str[N];
}
}Top
8 楼79bo(山芋)回复于 2004-05-05 15:12:08 得分 0
这个以前做过,编译后总出现乱码,后来发现是"\0"的问题.只要注意一下就简单了.
这是吧一个字符串后5位放到另一个字符串里的程序,如果放M位以后都放的话,可以改成srtlen-M做.
#include<stdio.h>
#include<string.h>
int main(void)
{
char ch1[10],ch2[10];
int i,len,j;
gets(ch1);
len=strlen(ch1);
for(j=i=len-5;i<len;i++)
{
printf("%c",ch1[i]);
ch2[i-len+5]=ch1[i];
}
ch2[len-j]='\0';
printf("\n");
puts(ch2);
return 0;
}Top
相关问题
- 给点帮助感激不尽
- 内存不能为read!指针问题!帮忙~感激不尽
- 急需C++教程入门电子书,哪位仁兄肯帮忙,感激不尽。
- 单片机c语言的一个问题,请各路大侠指点迷津!感激不尽!!!
- 200分求如下菜单例题,有A,B,C...栏,以及下拉子菜单,搞定将感激不尽!
- 求学习ASP.NET(C#)的好教材,明天打算去买,希望大家能推荐几本,感激不尽!
- 谁能帮我弄到delphi6的中文帮助文件,感激不尽!(我只能出这么多分)
- &&&&&&小弟现在初学COM,有谁留下QQ,帮助小弟,小弟感激不尽。
- 特急,特急,高手帮忙,感激不尽,感激不尽!!!
- 看<<C++大学教程>>受阻,各位看过的没看过的都帮兄弟一把,在下感激不尽。




