c语言编写函数newcopy(char *new,char *old)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言编写函数newcopy(char *new,char *old)相关的知识,希望对你有一定的参考价值。

它的功能是删除old所指向的字符串中的小写字母,并将所得到的新串存入new中。用指针编写。
#include<stdio.h>
void newcopy(char *new,char *old);
void main()
char *new,*old,a[1000];
int m,j;

printf("要输入多少个字符:");
scanf("%d",&m);
printf("请输入字符串:");
for(j=0;j<m;j++)
gets(a);
old=a;
new=a;
newcopy(new,old);
printf("输出运行后的字符串:%s\n",a[j]);

void newcopy(char *new,char *old)
int j=0;
for(;*old!='\0';++old)
if((*old)>'z'||(*old)<'a')

*(new+j)=*old;
j++;

*(new+j)='\0';

这个程序哪有问题?能实现这个问题吗?求高人指点。

newcopy函数没什么问题。 

主函数有问题。

#include<stdio.h>
void newcopy(char *new,char *old);
void main()
char *new,*old,a[1000];
int m,j;

//printf("要输入多少个字符:");//这里是没意义的。 输入字符个数不需要说明。 如果是多个字符串,那么下面循环要包含到输出部分。 
//scanf("%d",&m);
printf("请输入字符串:");
//for(j=0;j<m;j++)
gets(a);
old=a;
new=a;
newcopy(new,old);
printf("输出运行后的字符串:%s\\n",a);

void newcopy(char *new,char *old)
int j=0;
for(;*old!=\'\\0\';++old)
if((*old)>\'z\'||(*old)<\'a\')

*(new+j)=*old;
j++;

*(new+j)=\'\\0\';
参考技术A

主要的问题在于:实际上你只定义了一个字符串。因为你的char *new, old;声明之后没有分配空间。其实你定义两个字符数组就行了。

#include <stdio.h>
void newcopy(char *news, char *olds);
void main() 

//char *new, *old, a[1000];
char newstr[1000], oldstr[1000];
int m, j;

printf("要输入多少个字符:");
scanf("%d", &m);
getchar();
printf("请输入字符串:");
for(j = 0; j < m; j++) scanf("%c", &oldstr[j]);
oldstr[j] = '\\0';
//old = a;
//new = a;
newcopy(newstr, oldstr);
printf("输出运行后的字符串:%s\\n", newstr);

void newcopy(char *news, char *olds)
int j = 0;
for(; *olds !='\\0'; ++olds) 
if(*olds > 'z'|| *olds < 'a') 
*(news+j) = *olds;
j++;


*(news+j) = '\\0';

还有就是输入那里我改了。

本回答被提问者采纳
参考技术B 回答

newcopy函数没什么问题。主函数有问题。#includevoid newcopy(char *new,char *old);void main()char *new,*old,a[1000];int m,j;//printf("要输入多少个字符:");//这里是没意义的。 输入字符个数不需要说明。 如果是多个字符串,那么下面循环要包含到输出部分。 //scanf("%d",&m);printf("请输入字符串:");//for(j=0;j\'z\'||(*old)<\'a\')*(new+j)=*old;j++;*(new+j)=\'\\0\';

参考技术C 1)输入一个字符串而已,gets就是输入字符串,干吗搞一个for循环呢?
2)old和new都指向a了。然后你的newcopy实际上假设old,new指向不同地址的吧?

c#调用C、C++编写的dll

用c++编写了一个dll,现在要供c#调用,

在c++中调用的格式为:

typedef void (*CALLBACKF) (char **, int, double, char **);

typedef bool (*FUN)(char *, double , double , double , CALLBACKF, int);

dll=LoadLibrary(dllLocation);
FUN fun1=(FUN)GetProcAddress(dll, "fun");

在c#中如何实现?谢谢~
我需要的是如何输入输出 数组,题中的是char数组,包括一维和多维,我是这样写的

c中的callback在c#中如何实现?

参考技术A 此示例使用 C 程序创建一个 DLL,在下一示例中将从 C# 程序调用该 DLL。
// cmdll.c
// compile with: /LD
int __declspec(dllexport) SampleMethod(int i)

return i*10;


该示例使用两个文件 CM.cs 和 Cmdll.c 来说明 extern。C 文件是示例 2 中创建的外部 DLL,它从 C# 程序内调用。
// cm.cs
using System;
using System.Runtime.InteropServices;
public class MainClass

[DllImport("Cmdll.dll")]
public static extern int SampleMethod(int x);

static void Main()

Console.WriteLine("SampleMethod() returns 0.", SampleMethod(5));

参考资料:MSDN

参考技术B 将该DLL文件复制到C#的BIN下面就可以了撒 参考技术C 回调函数我用过,

定义这个typedef void (*CALLBACKF) (char **, int, double, char **);
回调函数
using System.Runtime.InteropServices;
class API

[UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)]
//上面这个可能不要 可能要,具体看你这个回调函数的调用方式是cdecl调用还是其他。
public delegate void ChCallback(参数自己一一对应);

[DllImport("Cmdll.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
public static extern bool FUN(char *, double , double , double ,ChCallback CallBack,int );
参数自己对应写,我的意思是自己定义一个delegate 对应C++ 中的CALLBACKF 然后再放到 fun参数里


然后其他类里实例api这个类后
pcallback = new API.ChCallback(MTEvent);
MTEvent为事件处理函数 意思就是typedef void (*CALLBACKF) (char **, int, double, char **);
这个在C#的具体回调实例!
public MTEvent(char **, int, double, char **)'

char 数组用 string接受

char *,这样定义

int len=128;
IntPtr cha = Marshal.AllocHGlobal(len);
len中间的len你自己看分配多少内存!cha 这就是一个指针。就是指向你分配的一块内存,然后把这个指针传递进去!本回答被提问者采纳

以上是关于c语言编写函数newcopy(char *new,char *old)的主要内容,如果未能解决你的问题,请参考以下文章

C语言编程-用数组方法编写函数strcmp,比较两个字符串的大小。

编写一个C语言函数,比较两个字符串的大小

用c语言编程编写函数,实现把一个字符串连接到后面一个字符串。并编写程序,在程序中自定义一个字符串数组

C语言:编写函数MyStrCmp并用相应主函数进行测试

C语言试题二十六之请编写一个函数function(char *s),该函数的功反转字符串中的内容。

C语言试题二十六之请编写一个函数function(char *s),该函数的功反转字符串中的内容。