Разбор аргументов командной строки
От: mansur https://netmontools.com
Дата: 07.01.04 18:52
Оценка:
Помогите, плз, почему в первом случае памяти под строку выделено столько, сколько запрашивал, а в остальных случаях — нет?
Вместо new пробовал malloc, то же самое.
Компилил VC++ 6.0 SP4.

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char** argv)  //Использую: example HTTP://mshome.manser.net/Ch13/Login.asp
{

    const int lenght = strlen(argv[1]);
    char* tmp = new char[lenght];  
    strcpy(tmp, argv[1]);
    printf("\n%d", lenght);  //39
    printf("\n%s", tmp);  //39 символов, как и должно быть.
    
    int j = 0, k = 0, l = 0, m =0, n = 0;

    for(j = 0; j < lenght; j++)
    {
        if(tmp[j] ==':')
        {
            k = j + 3;  
            break;
        }
    }

    char* proto = new char[j];  
    const int lproto = strlen(proto);
    printf("\n%d\n%d", j, lproto);  //j=4, lproto=17, почему?
    strncpy(proto, tmp,j);  
    printf("\n%s", proto);  //17 символов.

    n = k;  

    for(j = k; j < lenght; j++)
    {
        if(tmp[j] == '/')
        {
            l = j - n;  
            break;
        }
        continue;
    }    
    
    char* hst = new char[l];  
    const int lhst = strlen(hst);

    for(j = n ; j < (l + n); m++, j++)  
    {
          hst[m] = tmp[j];  
    }
    printf("\n%d\n%d", l, lhst);  //l=17, lhst=33, почуму?
    printf("\n%s", hst);  //33 символа.

    k = j;  

    for(j = k; j < lenght; j++)
    {
        tmp[j];  
    }
    l = j - k;

    char* dr = new char[l];  
    const int ldr = strlen(dr);

    m = 0;

    for(j = k; j < lenght; m++, j++)  
    {
        dr[m] = tmp[j];  
    }
    printf("\n%d\n%d", l, ldr);  //l=15, ldr=33, почему?
    printf("\n%s", dr);  //33 символа.

    return 1;
}
... << RSDN@Home 1.1.0 stable >>

Исправлено форматирование. -- ПК
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.