当前位置:首页 » 编程语言 » c语言函数传递字符串
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言函数传递字符串

发布时间: 2022-09-27 13:04:22

‘壹’ c语言字符串在函数间传递

#include<stdio.h>#include<string.h>char *start(char *wz);int main(){ char *sys = NULL; char xz,wz[99]="www"; scanf("%s",&xz); if (xz=='1') sys=start(wz);/*将wz值传入start*/ printf("%s",sys);
if (sys != NULL) // 注意:分配内存以后一定要释放
free(sys); return 0;}char *start(char *wz){
char* str = (char*)malloc(99); // 堆中分配内存
strcpy(str, "am start -a android.intent.action.VIEW -d http://"); strcat(str,wz); return str; }

其实不建议以这种方式来写,start函数可以写成2元函数,一个函数传入参数,一个函数传出结果。
void start(char* pOut, char* pIn)
{
strcpy(pOut, "am start -a android.intent.action.VIEW -d http://");strcat(pOut, pIn);
}

‘贰’ C语言:编写一个函数,由实参传来一个字符串,统计此字符串中字母,数字,空格和其他字符的个数。

char *ch,就是定义一个字符型的指针,来接收指针,在你的程序里就是接收你输入的字符串的首地址。要想返回实参,根据你的目的,应该是各类字符的个数,可以用一个数组实现。

int* sum(char *ch,int sum[4]);用一个长度为4的一维数组来统计各类字符的个数;

同样int* 表示返回一个整形指针;
你应该这样调用sum()函数;p=sum(ch,sum);(当然你之前要,在main()里定义一个整形指针接受sum()的返回值),把sum[4]={0}初始化全部为0,),用p[0],p[1],p[2],p[3]表示
字母,数字,空格和其他字符的个数。

不明白的再问我

‘叁’ c语言中 如果给函数形参传递字符串

单个字符用单引号引起来,比如'\0'你都用了双引号,改过来就好了

‘肆’ C语言如何在两个函数之间传送字符串

用指针,例如:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void abc(char *str){
strcpy(str,"string from abc\0");
};

void def(char *str){
printf("print in def: %s\n",str);
};

main()
{
char str[30];
abc(&str[0]);
def(&str[0]);
exit(0);
}

// abc()中给值,def()印出。

‘伍’ c语言:字符串做为函数参数传递

1、值传递

void swap(int x,int y)

{ int temp = x;

x = y;

y = temp;

}void main()

{

int a = 10, b = 20;

swap(a, b);

}

执行后,并不会交换。

2、引用传递

void swap(int &x,int &y)

{ int temp = x;

x = y;

y = temp;

}void main()

{

int a = 10, b = 20;

swap(a, b);

printf("a=%d b=%d ", a, b);

}

执行后,发生交换。

3、指针传递

void swap(int *x,int *y)

{ int temp = *x; *x = *y; *y = temp;

}void main()

{

int a = 10, b = 20;

swap(&a, &b);

printf("a=%d b=%d ", a, b);

}

执行后,发生交换。

参数传递只有上面三种,但是如果加上数组,就会产生几种新形式。

首先,明确数组型变量名本身只是该数组所占存储空间的首地址:

int a[3] = { 1, 2, 3 }; int *p = a; //等价于下行 //int *p = &a[0];

printf("%d", *p);

典型的数组做参数。

void fun(char s[]){ for (int i = 0; s[i] != ''; i++)

printf("%c", s[i]);

}void main()

{ char str[] = "Hello World!";

fun(str);

}

函数调用时,这里系统不会为形参分配数组存储空间,而是仅仅分配一个存放数组地址(第一个元素地址)的存储空间,此后,将实参数组的首地址传递给形参变量。

其实本质与下相同,只不过还是数组形式的(数组名代替指针)。

既然数组型变量名本身只是该数组所占存储空间的首地址,我们当然可以用指针做形参来接收数组实参。

void fun(char *p){ while (*p)

{

printf("%c", *p);

p++;

}

}void main()

{ char str[] = "Hello World!";

fun(str);

}

不过问题是如果这样,无法把握数组结束(除非知道数组长度)。而对于字符数组(上例),由于字符串末尾有结束标志''(ascii码正好是0),所以就很容易利用指针来判断字符串是否结束。

(5)c语言函数传递字符串扩展阅读:

调用带参数的函数:

在调用函数时,可以向其传递值,这些值被称为参数。

这些参数可以在函数中使用。

可以发送任意多的参数,由逗号 (,) 分隔:

myFunction(argument1,argument2)。

当声明函数时,请把参数作为变量来声明:

function myFunction(var1,var2){这里是要执行的代码}。

变量和参数必须以一致的顺序出现。第一个变量就是第一个被传递的参数的给定的值,以此类推。

按值传递参数:

按值传递参数时,是将实参变量的值复制一个到临时存储单元中,如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的值不变。

按值传递参数时,需要在参数名前加"ByVal"关键字。

按地址传递参数:

按地址传递参数时,把实参变量的地址传送给被调用过程,形参和实参共用内存的同一地址。在被调用过程中,形参的值一旦改变,相应实参的值也跟着改变。

如果实参是一个常数或表达式,Visual Basic 6.0会按"传值"方式来处理,按地址传递不需要"ByVal"关键字。

按数组传递参数:

在VB6.0中,允许使用数组作为实参传递到子过程的形参中,数组传递必须采用地址传递的方式来传递参数。数组参数在传递时应注意以下两个方面:

① 在实参和形参列表中只写数组名,忽略维数的定义,但圆括号不能省,当数组作为参数传递时,系统将实参数组的起始地址传给过程,使形参数组也具有与实参数组相同的起始地址,若参数是多维数组,每维以逗号分隔。

② 被调过程可分别通过Lbound和Ubound函数确定实参数组的下界和上界。

参考资料来源:网络-参数传递

参考资料来源:网络-字符串



‘陆’ 如何用c语言编一个函数 实现字符串作参数传递,给个编译过的程序

st 传入子程序, st2 从子程序送回.
---------------------------
#include <stdio.h>
void show_st( char *st, char *st2){
printf("%s\n", st);
strcpy(st2,"new string !!");
}

void main()
{
char st[32]="This is string !";
char new_st[32];
show_st( &st[0], &new_st[0]);
printf("new string is: %s\n", new_st);
exit(0);
}

‘柒’ C语言调用函数时,参数传的是字符串,并没有传字符串指针,为什么主函数中的值还是会变化

在c语言中,字符串是以字符数组的方式存储的,而数组的本质就是指针;
因此,传进去一个字符串,就是把它的地址传去了。

‘捌’ C语言 如何将一个字符串的内容传递给另一个字符串详见内

#include<stdio.h>
#include<string.h>
structabc
{
charaaa[10];
}

intmain()
{
structabcmmm;
chartemp[10]="0903";
strcpy(mmm.aaa,temp);//C语言标准库函数,将第二个参数的内容复制到第一个参数
return0;
}

‘玖’ 在c语言中 实现一个函数,传递一个字符数组,返回字符数组中的整数值,并在main函数中输出。

#include<stdio.h>
#include<cstring>
intk=1000;
char*find(char*a)
{
//charb[k];
/*最好将b的定义形式写成下面static的形式。常规定义会出现警告,而且可能会输出异常
因为数组b会随着函数结束而被释放内存,强行返回则会出现内存溢出
定义成静态形式,则数据不会因为函数结束而被释放内存,但是静态数组大小受到限制,
看你自己的实际情况选择*/
staticcharb[50];
intj=0;
for(inti=0;i<strlen(a);i++)
{
if(a[i]>='0'&&a[i]<='9')
{
b[j]=a[i];
j++;
}
}
returnb;
}
intmain()
{
chara[k];

printf("请输入字符串: ");

scanf("%s",&a);

char*c=find(a);

printf("字符串中数字有: ");

printf("%s ",c);
}

用返回值的形式来做数组问题确实不好,最好是用全局变量的形式做比较好。

有啥问题追问吧。