c语言题目 拷贝函数参数
目录
题目:假设我现在有很多参数分别用符号隔开,例如:"abcd,1234;xy,opasda",要求把逗号除掉,并一个个存放在数组中(不使用strtok函数)
方法一:使用char型的二维数组,让其内的元素存该参数,并将其打印出来。
方法二:使用指针数组,来存放函数参数的地址
总结:
题目:假设我现在有很多参数分别用符号隔开,例如:"abcd,1234;xy,opasda",要求把逗号除掉,并一个个存放在数组中(不使用strtok函数)
方法一:使用char型的二维数组,让其内的元素存该参数,并将其打印出来。
思路:定义一个指针指向该参数串,并用strlen函数获得字符串的长度,也可以定义一个一维数组并初始化,这里体现了指针跟数组的互相转换,我们通过偏移指针来给二维数组赋值,下面是我的算法和代码。
代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
//方法一:定义一个二维数组
char *s = "abcd,1234;xy,opasda";
char x[4][10];
int ii = 0;
for (int i = 0; i < 4; i++)
{
for (int h = 0; ii < strlen(s); ii++, h++)
{
if (s[ii] == ',' || s[ii] == ';')
{
ii++;
break;
}
x[i][h] = s[ii];
}
}
for (int i = 0; i < 4; i++)
{
printf("打印拷贝好参数%s\n", x[i]);
}
return 0;
}
方法二:使用指针数组,来存放函数参数的地址
思路:定义一个char型的数组来存放函数参数的字符串,而不是一个指针,是因为指针是代表地址,而函数的参数串是一个常量,不能被修改,同时也是因为使用指针会导致获取到的指针它会把后面全部参数都打印出来,所以我们要用数组来存放这样才能跟我们的'\0'结束符好搭配。
当我们的数组偏移到,或者;我们就可以置为结束标记,并使其继续走。
代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
char s[] = "abcd,1234;xy,opasda";//不能使用char *s= "abcd,1234;xy,opasda
//方法二:定义指针数组来存放
char *p[4]; //指针数组 里面的元素是指针
int ii = 0;
for (int i = 0; i < 4; i++)
{
p[i] = s+ii;
for (; ii < sizeof(s); ii++)
{
if (s[ii] == ',' || s[ii] == ';')
{
s[ii] = '\0';//结束标志
ii++;
break;
}
}
}
for (int i = 0; i < 4; i++)
{
printf("打印拷贝好参数%s\n", p[i]);
}
return 0;
}
总结:
二维数组的方法是通过对函数参数的拷贝,所以不需要结束标记,只需要字符一个一个的正确拷贝到里面即可;
指针数组的方法因为里面的元素是指针,所以我们要用数组先对其函数参数串的拷贝再去修改,如果是指针指向该函数参数串,那么常量是无法修改的会报错。另外我们在使用结束标记\0后,我们还不能使用strlen函数,因它是计算有效长度,一旦出现了\0就会停止计算,所以我们要使用sizeof函数来计算数组的大小。