LINUX.ORG.RU

написал прогу 
int main ( int argc, char *argv[], char *argp[])
             {  int i=0;
                printf ("\n Имя программы %s", argv[0]);
                printf ("\n argc=%d sizeof(argv)=%d \n",argc,sizeof(argv));
                for    (i=0; i<=argc ; i++)
                printf (" аргумент %d равен %s \n",i, argv[i]);
return (0);
}
и получается
# ./a.out hope for the best

 Имя программы ./a.out
 argc=5 sizeof(argv)=4
 аргумент 0 равен ./a.out
 аргумент 1 равен hope
 аргумент 2 равен for
 аргумент 3 равен the
 аргумент 4 равен best
 аргумент 5 равен (null)
#

соственно вопрос почему sizeof(argv)=4 если он вроде как должен быть равен argc

anonymous
()
Ответ на: комментарий от Sveta_F

хотя не, вроде не так. :)
argv это мосиф из (char *), а масиф это укозатель, а укозатель это 32bit ;) хе хе хе, сёдня я пила пиво :)

Sveta_F
()
Ответ на: комментарий от Sveta_F

блин пиши нормально я и так нихера понять немогу!!!!

anonymous
()

bugmaker@buggy:~/tmp$ cat c.c
int main (int argc, char * argv []) {
  char * c [1];
  int * i [2];
  long int * l [3];
  void * v;
  printf ("size of char * [1]:%i\n", sizeof (c));
  printf ("size of int * [2]:%i\n", sizeof (i));
  printf ("size of long int * [3]:%i\n", sizeof (l));
  printf ("size of void *:%i\n", sizeof (v));
  return 0;
}

bugmaker@buggy:~/tmp$ gcc c.c -o c
bugmaker@buggy:~/tmp$ ./c
size of char * [1]:4
size of int * [2]:8
size of long int * [3]:12
size of void *:4
bugmaker@buggy:~/tmp$

:P

bugmaker ★★★★☆
()
Ответ на: комментарий от bugmaker

И что это доказывает? Или показывает? Что sizeof() указателя равен 4?

Rock
()
Ответ на: комментарий от anonymous

sizeof(argv) эквивалентно в данном случае sizeof((char*)[]), что эквивалентно в C++ sizeof(char**), т.к. реализация именно такова. А sizeof любого указателя на x86 - 4 байта (если не рассматривать near указатели в реальном режиме под DOS :) ).

Получить размер динамического массива в C++ с помощью sizeof нельзя. И вообще, для того, чтобы размер динамического массива был известен, надо предпринимать дополнительные действия: либо хранить длину (как в argc), либо заводить специальное значение элемента, обозначающее конец массива (как в NULL-terminated строках).

Rock
()
Ответ на: комментарий от Rock

> А sizeof любого указателя на x86 - 4 байта (если не рассматривать near указатели в реальном режиме под DOS :)

А если рассматривать far указатели в защищенном 32-битном режиме? :)

anonymous
()
Ответ на: комментарий от anonymous

> А если рассматривать far указатели в защищенном 32-битном режиме? :)

Это ещё более редкий случай. Так что, его тоже замнём :)

Rock
()
Ответ на: комментарий от Rock

народ мож подскажеет книжку по си под линух, лучше в электронном виде, а то денег у меня все равно нет, в гугле тож ниче не нашел

2Rock сенк за разъяснение

anonymous
()
Ответ на: комментарий от human0id

ее у меня есть уже, не сказал бы что рулит цифровой вариант, а больше никто ничего не встречал

anonymous
()
Ответ на: комментарий от anonymous

еще один вопрос появился - есть прога 
#include <stdio.h>
#define maxline 20
int main (int argc,char *argv[]){
        int i,k=0;
        FILE *fp,*fw;
        char line[maxline],myline[5]={"size="},needline[7]={"size=0\n"};

        fp=fopen("test.ini","r");
        fw=fopen("temp.file","w");
        while ((fgets(line,maxline,fp))!=NULL){
                for (i=0;i<=5;i++)
                        if (line[i]==myline[i]) k++;
                if (k==5)
                fputs(needline,fw);
                else
                fputs(line,fw);
                k=0;
                }

        return(0);
}
на выходе получается что-то типа 
[KINGDOMS.RUL]
dstdir=maps\Kingdoms
size=0
@^C

собственно вопрос - что за символы @^C и откуда они берутся и как их убрать нафиг?

anonymous
()
Ответ на: комментарий от anonymous

> char line[maxline],myline[5]={"size="},needline[7]={"size=0\n"};

> fputs(needline,fw);

Нужно needline[8], а так у тебя завершающий '\0' не влазит и fputs мусор выдаёт всякий.

P.S. А зачем строковые константы ещё и в фигурные скобки? Кавычек мало? :))

Rock
()
Ответ на: комментарий от Rock

угу сенк заработало

>P.S. А зачем строковые константы ещё и в фигурные скобки? Кавычек мало? :))

терь буду знать, что они нафиг ненужны :)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.