纯C的函数
用了太久c++了,有些惯用的函数不能用了,只能够自己再写它出来实现吧
//写下linux的shell
int32_t myexec(const char *cmd) {
int size=0;
FILE *pp = popen(cmd, "r");
if (!pp) {
return -1;
}
char tmp[1024];
while (fgets(tmp, sizeof(tmp), pp) != NULL) {
if (tmp[strlen(tmp) - 1] == '\n') {
tmp[strlen(tmp) - 1] = '\0';
}
size++;
}
pclose(pp);
return size;
}
//例如,myexec(”ls”);就是相当于打下linux的shell,ls语句
//字符串相加=s1+s2
char *str_cat(char *s1,char *s2) {
char *s = (char *)malloc(strlen(s1) + strlen(s2) + 1);
char *ps = s;
while(*s++ = *s1++);
--s;
while(*s++ = *s2++);
return ps;
}
//例如,s3=str_cat(s1,s2)
//字符串分割
//1.首先建立一个字符串组结构
typedef struct strtokStruct {
char** str;//字符串组
int strLen;//字符数组的大小
} strtokStruct_t;
//2.分割函数
strtokStruct_t strtokStr(const char *str,const char *pch)
{
strtokStruct_t strtokStruct_p;
char* checkLenStr=strdup(str);
strtokStruct_p.strLen=0;
char *pCheckStr;
pCheckStr=strtok(checkLenStr, pch);
strtokStruct_p.strLen++;
if(strlen(pCheckStr)<=0)
{
return strtokStruct_p;
}
while(pCheckStr = strtok(NULL, pch))
{
strtokStruct_p.strLen++;
}
strtokStruct_p.str=(char **)malloc(sizeof(char*)*strtokStruct_p.strLen);
int iStr=0;
char *pStr;
char* checkStr=(char*)malloc(strlen(str)+1);
strcpy(checkStr,str);
pStr=strtok(checkStr, pch);
strtokStruct_p.str[iStr]=(char*)malloc(strlen(pStr)+1);
strtokStruct_p.str[iStr]=pStr;
//printf("%s ", strtokStruct_t.str[iStr]);
iStr++;
while(pStr = strtok(NULL, pch))
{
strtokStruct_p.str[iStr]=(char*)malloc(strlen(pStr)+1);
strtokStruct_p.str[iStr]=pStr;
//printf("%s ", strtokStruct_t.str[iStr]);
iStr++;
}
/*for(int i=0;i<strtokStruct_p.strLen;i++)
{
printf("%s ",strtokStruct_p.str[i]);
}
printf("\n");
printf("strtokStruct_t.strLen:%d",strtokStruct_p.strLen);*/
return strtokStruct_p;
}
/*实现例子
strtokStruct_t strtokStruct_p;
strtokStruct_p=strtokStr("123,456,789",",");
for(int j=0;j<strtokStruct_p.strLen;j++)
{
char * test=(char*)(strlen(strtokStruct_p.str[j])+1);
test=strtokStruct_p.str[j];
printf("test:%s ",test);
}
*/实现例子 //结果:123 456 789