Permalänk
Medlem

Pekare i C

Bara skräpkod, men gjorde en övning och stötte på detta..
(Ska bara vända på en textsträng)

Blev lite fundersam; antingen ser jag inte felet eller så är det nåt galet.
Min översta printf: Kommenterar jag bort denna, så får jag helt konstig utskrift i prtinf'en i main().
Låter jag den vara där, så får jag fin utskrift, och även i den andra printf'en.

Vad behöver jag ändra?

#include <stdio.h> #include <stdlib.h> #define STR_LEN 100 char string[STR_LEN]; char *invert(char *str) { char temp[STR_LEN]; int len = strlen(str); int i = 0, j = len-1; while (i < len) { temp[i] = str[j]; i++; j--; } temp[len] = '\0'; printf("%s", temp); return temp; } void main(void) { scanf("%s", string); printf("%s", invert(string)); }

EDIT:

Av någon anledning hade jag placerat min temp-array inuti funktionen.
Den ska självklart ligga utanför om jag vill komma åt den..

Visa signatur

WS: Asus P8Z77-I Deluxe mITX | Intel 3770K@4.6 | NH-U12P | Asus 780 GTX | Corsair 2x8GB 1600Mhz CL9 | Samsung 840 512GB | Ubuntu 16.04.3 x86_64 | Corsair AX750 | 2x Dell U2412M | Puppe.se | NAS: i7 860, 16GB DDR3, GA-P55M-UD4, FD Define R3, 8x2TB Samsung F4EG, Serveraid M1015, EVGA 750W G2 PSU, FreeBSD x64

Permalänk
Vila i frid

...eller så kan du göra så här som pisses off vilken ärrad programerare som helst!

char *invert(char *str) { char temp[STR_LEN]; int len = strlen(str); int i = 0, j = len-1; while (i < len) { temp[i] = str[j]; i++; j--; } temp[len] = '\0'; strcpy(str,temp); return str; }

Dold text
Permalänk
Medlem

Gör aldrig, ALDRIG så där! Seriöst

Temp-arrayen ligger på stacken och kan skrivas över med godtycklig data när du väl returnerar. Se till att den som anropar funktionen skickar in minne som du kan skriva till istället.

Visa signatur

void@qnet
teeworlds, stålverk80, evil schemer, c, c++
Languages shape the way we think, or don't.

Permalänk
Vila i frid

Resultatet blir inte instabilt om du kikar lite, däremot modifieras den medskickade parametern dvs globala variabeln "string" - vilket kan förvilla vilken fiende som helst.

Permalänk
Medlem

Sorry, jag läser lite dåligt (och förväntar mig det värsta

Visa signatur

void@qnet
teeworlds, stålverk80, evil schemer, c, c++
Languages shape the way we think, or don't.

Permalänk
Medlem

En fråga bara hur har ni lärt en skript- och programmeringsspråk?

Läst böcker, gått kurser. Ja .. Hur har ni gjort? ^^

Visa signatur

Köp ny mus för 800:- JA, du kommer bli GRYM på cs och sätta huvudskott hela tiden. Du får heller ALDRIG ont i leder.
Eller är det bara så att e-pen*** förlängs om du har en dyrare mus?

Permalänk
Vila i frid

Grunderna lär man sig bäst i skolan/universitet när man är fräsch i pallet, sen hjälper det att ha jobbat med c/c++ programmering i nästan 30 år på t.ex. Ericsson. Det blir rätt tråkigt i längden...

Enklast att komma igång är väl att hitta ett ämne som är intressant och göra något vettigt av det.