c语言字符串传入函数 c语言字符串传递

C语言中如何调用一个函数输入字符串.这个函数怎么写#include string.h
#include stdio.h
main()
{char a[100];
gets(a);
printf("%s\n",a);
}
gets()函数用来从标准输入设备(键盘)读取字符串直到换行符结束 , 但换行符会被丢弃,然后在末尾添加'\0'字符 。其调用格式为: gets(s); 其中s为字符串变量(字符串数组名或字符串指针) 。gets(s)函数与scanf("%s:",s)/* scanf("%s",s) */相似,但不完全相同,使用scanf("%s",s);函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束 , 空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止 。
要函数就这样:
#include string.h
#include stdio.h
void sr(char *a)
{ gets(a);
}
main()
{char a[100];
sr(a);
printf("%s\n",a);
}
哦哦O(∩_∩)O^_^
c语言字符串在函数间传递#includestdio.h#includestring.hchar *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语言怎么写个 字符串插入函数程序的大体思路可以是这样:
str1是原字符串,str2是待插入的字符串,position是待插入的位置,我们可以这样 , 用一个指针p_cur指向字符串1 str1中的待插入位置position,另一个指针p_end指向字符串1 str1的尾部,每次插入字符前,把str1中从当前位置开始一直到结束字符全部后移一个位置,空出当前位置,然后把要插入的字符放进这个位置 , 这样就完成了一个字符的插入,重复这个步骤,直到str2被完全插入 。
代码如下:
#include stdio.h
#include string.h
void insert_str(char str1[],char str2[],int position)
{
/*
insert_str()函数
功能:将字符串str2插入到str1的position位置处
参数:char str1,char str2 ,int position
返回值:无
*/
int i;
char *p_end,*p_cur,*p;/*p_end指向第一个字符串的尾部,p_cur指向被插入的位置*/
p_end=str1 strlen(str1)-1;
p_cur=str1 position-1;
for(i=0;str2[i]!='\0';i)
{
for(p=p_end;p=p_cur;p--)
{
*(p 1)=*p;/*从p_cur到p_end的全部元素后移一个位置 , 此时p_cur指向的位置就空出来了*/
}
*p_cur=str2[i];/*把字符串2中的字符插入空出来的位置*/
p_cur;/*p_cur下移一个位置*/
p_end;/*多了一个字符,因此p_end也下移一个位置*/
}
}
void main()
{
char s1[100],s2[20];
int position;
printf("输入字符串1:\n");
gets(s1);
printf("输入插入位置:");
do
{
scanf("%d",position);
while(getchar()!='\n');/*这一句可以把输入position的时候输入的回车去掉*/
}while(position0||positionstrlen(s1));
printf("输入字符串2:\n");
gets(s2);
insert_str(s1,s2,position);
printf("字符串被插入后变成:\n");
puts(s1);
}
c语言如何传递字符串?c语言函数中传递字符串 , 可以分为两种情况,一种是将字符串作为参数,一种是将字符串作为返回值
,当使用字符串作为返回值时,切记不要传递局部字符数组 。下面是一个示例代码:
#include
#include
#include
void f(char *str) {//字符串作参数
printf(str);
}
char * r() {//字符串作返回值
//使用动态分配内存,不要使用局部变量比如
//char buf[80]; 因为局部变量在函数结束时,栈区变量已被回收
char *str = (char *)malloc(256 * sizeof(char));
if (str==0) { printf("can't alloc mem\n"); return 0;}
else memset(str, 0x00 ,sizeof(char) * 256);
return str;//
}
int main()
{
char *pstr = r();
if (pstr!=0) strcpy(pstr, "hello world\n");
f(pstr);
free(pstr);
return 0;
}
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\nb=%d\n", 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\nb=%d\n", a, b);
}
执行后,发生交换 。
参数传递只有上面三种,但是如果加上数组,就会产生几种新形式 。
首先 , 明确数组型变量名本身只是该数组所占存储空间c语言字符串传入函数的首地址:
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] != '\0'; i)
printf("%c", s[i]);
}void main()
{char str[] = "Hello World!";
fun(str);
}
函数调用时,这里系统不会为形参分配数组存储空间,而是仅仅分配一个存放数组地址(第一个元素地址)的存储空间,此后,将实参数组的首地址传递给形参变量 。
其实本质与下相同,只不过还是数组形式的(数组名代替指针) 。
既然数组型变量名本身只是该数组所占存储空间的首地址,c语言字符串传入函数我们当然可以用指针做形参来接收数组实参 。
void fun(char *p){while (*p)
{
printf("%c", *p);
p;
}
}void main()
{char str[] = "Hello World!";
fun(str);
}
不过问题是如果这样,无法把握数组结束(除非知道数组长度) 。而对于字符数组(上例),由于字符串末尾有结束标志'\0'(ascii码正好是0),所以就很容易利用指针来判断字符串是否结束 。
扩展资料:
调用带参数的函数:
在调用函数时 , 可以向其传递值,这些值被称为参数 。
这些参数可以在函数中使用 。
可以发送任意多的参数,由逗号 (,) 分隔:
myFunction(argument1,argument2) 。
当声明函数时 , 请把参数作为变量来声明:
function myFunction(var1,var2){这里是要执行的代码} 。
变量和参数必须以一致的顺序出现 。第一个变量就是第一个被传递的参数的给定的值 , 以此类推 。
按值传递参数:
按值传递参数时 , 是将实参变量的值复制一个到临时存储单元中,如果在调用过程中改变了形参的值 , 不会影响实参变量本身,即实参变量保持调用前的值不变 。
按值传递参数时,需要在参数名前加"ByVal"关键字 。
按地址传递参数:
按地址传递参数时,把实参变量的地址传送给被调用过程,形参和实参共用内存的同一地址 。在被调用过程中,形参的值一旦改变,相应实参的值也跟着改变 。
如果实参是一个常数或表达式 , Visual Basic 6.0会按"传值"方式来处理,按地址传递不需要"ByVal"关键字 。
按数组传递参数:
在VB6.0中,允许使用数组作为实参传递到子过程的形参中,数组传递必须采用地址传递的方式来传递参数 。数组参数在传递时应注意以下两个方面:
① 在实参和形参列表中只写数组名,忽略维数的定义,但圆括号不能省 , 当数组作为参数传递时,系统将实参数组的起始地址传给过程,使形参数组也具有与实参数组相同的起始地址,若参数是多维数组 , 每维以逗号分隔 。
② 被调过程可分别通过Lbound和Ubound函数确定实参数组的下界和上界 。
参考资料来源:百度百科-参数传递
参考资料来源:百度百科-字符串
【c语言字符串传入函数 c语言字符串传递】c语言字符串传入函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言字符串传递、c语言字符串传入函数的信息别忘了在本站进行查找喔 。

    推荐阅读