[C] Felaktig utmatning med printf() och system() [LÖST]

Här diskuteras programmering och utveckling
Christian Holmberg
Inlägg: 194
Blev medlem: 02 nov 2006, 22:02
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

[C] Felaktig utmatning med printf() och system() [LÖST]

Inlägg av Christian Holmberg »

Här är koden:

Kod: Markera allt

#include <stdio.h>

main () {
	printf("Hi, my name is: ");
	system("whoami");
	printf("\n");
	printf("Nice to meet you.\n");
}
här är utmatningen jag får på mitt system:

Kod: Markera allt

christian@Server:~/Programming/C/hello_world$ ./hello2
<ditt kontonamn>
Hi, my name is:
Nice to meet you.
Om man följer strukturen i programmet så borde utmatningen bli följande:

Kod: Markera allt

Hi, my man is <ditt kontonamn>
Nice to meet you
men så är inte fallet. Vad är det som spökar?
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: felaktig utmating i mitt hello world program skrivet i C

Inlägg av Konservburk »

printf() är rad-buffrad, vilket betyder att ingenting skrivs ut innan det kommer en nyrad. Men du kan använda fflush(stout) för att tvinga fram en utskrift:

Kod: Markera allt

printf("Hi, my name is: ");
fflush(stdout);
system("whoami");
printf("Nice to meet you.\n");
Det går även att stänga av buffringen:

Kod: Markera allt

setvbuf(stdout, 0, _IONBF, 0);
printf("Hi, my name is: ");
system("whoami");
printf("Nice to meet you.\n");
Eller så använder du obuffrade lågnivå-funktioner istället:

Kod: Markera allt

write(0, "Hi, my name is: ", 16);
system("whoami");
write(0, "Nice to meet you.\n", 18);
Christian Holmberg
Inlägg: 194
Blev medlem: 02 nov 2006, 22:02
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Re: felaktig utmating i mitt hello world program skrivet i C

Inlägg av Christian Holmberg »

Tack.
Alltså var det mina C-skills som spöka :P
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: felaktig utmating i mitt hello world program skrivet i C

Inlägg av Konservburk »

En bättre lösning är annars att inte använda sig av system("whoami")...

Kod: Markera allt

#include <stdio.h>
#include <unistd.h>
#include <pwd.h>

int
main()
{
	struct passwd *pw;

	if ((pw = getpwuid(geteuid())))
	{
		printf("Hi, my name is: %s\n", pw->pw_name);
		printf("Nice to meet you.\n");

		return 0;
	}
	return 1;
}
jsiei97
Inlägg: 309
Blev medlem: 09 dec 2008, 21:34
OS: Xubuntu
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Trelleborg

Re: felaktig utmating i mitt hello world program skrivet i C

Inlägg av jsiei97 »

Konservburk skrev:En bättre lösning är annars att inte använda sig av system("whoami")...

Kod: Markera allt

#include <stdio.h>
#include <unistd.h>
#include <pwd.h>

int
main()
{
	struct passwd *pw;

	if ((pw = getpwuid(geteuid())))
	{
		printf("Hi, my name is: %s\n", pw->pw_name);
		printf("Nice to meet you.\n");

		return 0;
	}
	return 1;
}
Bra mycket snyggare lösning :)
Skriv svar

Återgå till "Programmering och webbdesign"