Kullanmıyorum. Ayrıca bu konularda pek bir bilgim yok.
[CODE lang="c" title="C kodu"]#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_WORD 16
#define MAX_LENGTH 32
typedef struct _Argumans
{
char **argv;
int argc;
}Argumans;
int iskey(unsigned char ch)
{
return (ch > 32 && ch != 127) ? 1 : 0;
}
char *find_double_quotes(char *str)
{
for(; *str != '\0'; str++)
{
if(*str == '\"')
{
return str;
}
}
return 0;
}
char *find_word(char *str)
{
for(; (iskey(*str) == 0); str++)
;
return str;
}
char **seperate_words(char *str, Argumans *arg)
{
static char **dizi;
char *temp, *tmp, *cift_tirnak_konumu;
int index = 0, toplam = 0, argc = 0, mindex = 0, cift_tirnak = 0;
dizi = (char **)calloc(MAX_WORD, sizeof(char*));
for(index = 0; index < MAX_WORD; index++)
{
dizi[index] = (char*)calloc(MAX_LENGTH, sizeof(char));
}
cift_tirnak = ((cift_tirnak_konumu=find_double_quotes(str)) == 0) ? 0 : 1;
for(index = 0, mindex = 0; str[index] != '\0'; mindex++)
{
temp = dizi[mindex];
str = find_word((str+index));
if(*str == '"')
{
for(index = 0; str[index+1] != '"'; index++)
{
temp[index] = str[index+1];
}
index+=2;
}
else
{
for(index = 0; (iskey(str[index]) != 0); index++)
{
temp[index] = str[index];
}
}
}
dizi[mindex] = '\0';
arg->argc = mindex;
arg->argv = dizi;
return dizi;
}
int main(void)
{
Argumans arg;
char str[50];
int index = 0;
printf("Bir metin giriniz: ");
gets(str);
seperate_words(str, &arg);
printf("Arguman sayisi: %d\n", arg.argc);
for(index = 0; arg.argv[index] != '\0'; index++)
{
printf("%d. eleman: %s\n", index+1, arg.argv[index]);
}
return 0;
}
[/CODE]
Şuna benzer bir kod var argümanlara ayırmayı sağlıyor. Kendi projene göre uyarlayabilirsin.