Stałe znakowe, przypisanie następnej wartości

Stałe znakowe, przypisanie następnej wartości
bartek164
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 534
0

o co ctu chodzi, dlaczego jest innstukcja *w++= c;
przecież nie można nadpisywać stałej znakowej

Kopiuj

/* getword: get next word or character from input */

 int getword(char *word, int lim)

 {
 	int c, getch(void);
 	void ungetch(int);
 	char *w = word;
	
	while (isspace(c = getch()))
 		;
 	if (c != EOF)
 		*w++ = c; // tutaj
 	if (!isalpha(c)) {
 		*w = '\0';
 		return c;
 	}
	 
	for ( ; --lim > 0; w++) 
 	    if (!isalnum(*w = getch())) {
 	        ungetch(*w);
 	        break;
 	     }
	*w = '\0';
 	return word[0];
  }

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
0

A gdzie masz w tym wyrażeniu stałą, bo żadnej nie widzę?

bartek164
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 534
0

no jest taka sama sytuacja

Kopiuj
#include <stdio.h>
#include <stdlib.h>

/* getword: get next word or character from input */

 int getword(char *word, int lim)

 {
 char *w = word;
 *w++=4;
  }
int main()
{
    getword("znak",10);
    return 0;
}
kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
2

To co robisz to UB. Robisz implicit cast z char const[] do char* na co język niestety zezwala. W samej definicji funkcji nie jest błędem przypisanie do zmiennej.

Pokrewny post z C++, ale tutaj też się odnosi: https://dev.krzaq.cc/post/stop-assigning-string-literals-to-char-star-already/

carlosmay
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Pabianice
2

No i jeszcze deklarujesz, że funkcja getword coś ma zwracać, ale tego nie robi.

bartek164
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 534
0

nie rozumiem , dobrze rozumiem?
mam char* w = word
a potem *w++ = c przypisz zerowemu elementowi tablicy c czyli znak/liczbe i przesun wskaznik na 1 element

bartek164
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 534
0

aha, bo tu jest przypsianie, do char* w char* word , no ale co to word już nie jest stałą znakową? to czym jest bo nie rozumiem

bartek164
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 534
0

nie wiedziałem że tak moźna omg, nie było na wykładzie jestem wstrząśnięty dziekuje

Kopiuj
#include <stdio.h>
#include <stdlib.h>

void getword(char* word, int lim)

{
    char* w = word;
    *w++ = 66;
    printf("%s", w);
}
int main()
{
    char word[] = "tak";
    getword(word, 10);

    return 0;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.