Я думаю, что эта работа для вас.И я скоро закончу и добавлю больше объяснений.
Уродливая версия.
Код
#include <stdio.h>
int main(int argc, char *argv[]){
int i,j,t;
i=j=t=0;
int nrows=2;
int ncolumns=50;
char *ptr = argv[1];//"true and false; 1 + 2";
char *str;
char **array1 = malloc(nrows * sizeof(char *)); // Allocate row pointers
for(i = 0; i < nrows; i++)
array1[i] = malloc(ncolumns * sizeof(char)); // Allocate each row separately
i=0;
while (ptr[i] != ';')
{
array1[0][i]=ptr[i];
i++;
//printf("%c ",ptr[i]);
}
j=0;
i++;//not store ;
while (ptr[i] != '\0')
{
array1[1][j]=ptr[i];
i++;
j++;
}
printf("%s\n", array1[1]);
}
Редактировать
Лучшая версия
#include <stdio.h>
#include <stdlib.h> //for malloc
int main(int argc, char *argv[]){
int i,j,t;
i=j=t=0;
int nrows=2;
int ncolumns=50;
char *ptr = argv[1];//"true and false; 1 + 2";
char **array1 = malloc(nrows * sizeof(char *)); // Allocate row pointers
for(i = 0; i < nrows; i++){
array1[i] = malloc(ncolumns * sizeof(char)); // Allocate each row separately
}
i=0;
int flag=0;
while(ptr[i]!='\0'){
if (ptr[i]!=';'){
array1[flag][j]=ptr[i];
j++;
}else if(ptr[i]==';'){
flag=1;
j=0;
}
i++;
}
printf("%s\n", array1[1]);
return 0;
}
Статический и динамический,для / пока версия
#include <stdio.h>
#include <stdlib.h> //for malloc
///Can use either
///source: https://stackoverflow.com/a/2614257/7508077
char ** alloc_mem(int nrows, int ncolumns){
char ** array2 = malloc(nrows * sizeof(char *)); // Allocate the row pointers
array2[0] = malloc(nrows * ncolumns * sizeof(char)); // Allocate all the elements
for(int i = 1; i < nrows; i++)
array2[i] = array2[0] + i * ncolumns;
return array2;
}
char ** alloc_mem2(int nrows, int ncolumns){
char ** array2 = malloc(nrows * sizeof(char *)); // Allocate row pointers
for(int i = 0; i < nrows; i++){
array2[i] = malloc(ncolumns * sizeof(char)); // Allocate each row separately
}
return array2;
}
int main(int argc, char *argv[]){
int i,j,t;
i=j=t=0;
int nrows=2;
int ncolumns=50;
char *ptr;
if (argc==2){
ptr = argv[1];//"true and false; 1 + 2";
}else{
printf("Use true arguments...: ./check \"true and false; 1 + 2 \"\n ");
exit(0);
}
///Memory
//dynamic memory allocation for 2-D char array
//char **array1;
//array1=alloc_mem(nrows, ncolumns);
//or just static allocation with
char array1[nrows][ncolumns];
i=0;
int flag=0;
///use while or for, i prefer for
/*
while(ptr[i]!='\0'){
if (ptr[i]!=';'){
array1[flag][j]=ptr[i];
j++;
}else if(ptr[i]==';'){
flag=1;
j=0;
}
i++;
}
*/
for(int i=0;ptr[i]!='\0';i++){
array1[flag][j]=ptr[i];
j++;
if(ptr[i]==';'){
flag=1;
j=0;
}
}
printf("%s\n", array1[1]);
return 0;
}