On Wed, Apr 3, 2019 at 10:01 PM Alexandru Fazakas via so <so@cursuri.cs.pub.ro> wrote: > > In caz ca mai e cineva in aceeasi situatie, un work-around bun ar putea fi sa > aruncati o privire la execl [1]. :) > > [1] https://linux.die.net/man/3/execl > > Alex > > On Wed, Apr 3, 2019 at 9:23 PM Paul Olaru <olarupaulstelia...@gmail.com> > wrote: >> >> Există o funcție în familia exec care te scutește de acel array, overall. >> >> Te avertizează generic că ai un vector de pointeri, pointerii în sine sunt >> constanți si chestiile la care indică nu neapărat. >> >> On Wed, Apr 3, 2019, 21:19 Alexandru Fazakas via so <so@cursuri.cs.pub.ro> >> wrote: >>> >>> Salut, >>> >>> Stie cineva de ce `static const char *args[] = {"sh", "-c", NULL, NULL};` >>> rezulta >>> pe checkerpatch intr-un warning de tipul `../util/so_stdio.c:267: >>> WARNING:STATIC_CONST_CHAR_ARRAY: static const char * array should probably >>> be static const char * const`? >>> >>> Mersi, >>> Alex
Salut, În C există două calificative separate pentru pointer-i: 1. const char *p = "sh"; // valoarea spre care indică p este constantă, dar p nu este forțat să fie constant 2. char * const p = "sh"; // valoarea pointer-ului este constantă, dar datele spre care indică nu sunt neapărat constante Probabil din modul natural de citire, ar părea că prima variantă face ce face a doua, însă nu este adevărat. Cele două se pot combina în `const char *const p = "sh"; ` pentru a face atât pointer-ul cât și datele constante. Pentru problema ta, checkpatch spune că vede că ai un array de pointeri spre date constante (ex. "sh" nu va putea fi modificat), dar pointerii nu sunt constanți (ex. args[0] = "ls" este posibil). Așteptarea este, probabil, ca atunci când vede un array de pointeri de caractere (string-uri) inițializat inline, să fie atât datele și pointer-ii constate. Dacă vrei totuși să poți să modifici pointer-ii (presupun că primul NULL ai vrea să îl schimbi), atunci ai putea să folosești `static char const *arr[]`. Varianta asta funcționează la fel ca primul exemplu (datele vor fi constante, nu pointer-ul), iar checkpatch nu se plânge (s-ar putea să fie un corner case care nu este tratat de checkpatch, deci nu este foarte recomandat -- dacă știe cineva mai exact, corectați-mă dacă am spus prostii). All the best, Darius _______________________________________________ http://ocw.cs.pub.ro/courses/so/info/lista-discutii