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

0

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


/* 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];
  }

0

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

0

no jest taka sama sytuacja

#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;
}
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/

2

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

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

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

0

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

#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;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1