---
title: "new_item (menu) tar inte åäö"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/80923-new-item-menu-tar-inte-åäö"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "Gein"
published: "2003-06-30T15:46:07.000Z"
updated: "2003-06-30T19:34:13.000Z"
replies: 24
views: 712
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/80923-new-item-menu-tar-inte-åäö"
---

# new_item (menu) tar inte åäö

_Sida 1 av 2._

## #1 — Gein, 2003-06-30T15:46Z

Håller på att skriva en meny med menu- och curses-biblioteket och har stött på ett problem.
\*name i new_item tar inte åäö, antar att andra fultecken inte heller funkar. Kan jag komma runt detta och få åäö i min meny iaf?

ITEM \*new_item(const char \*name, const char \*description);

[Mer info](http://www.mkssoftware.com/docs/man3/mitem_new.3.asp)

Permalänk: https://www.webforum.nu/p/80923

## #2 — SPiN, 2003-06-30T15:47Z

Kan du inte använda dig av klassen string istället?

Permalänk: https://www.webforum.nu/p/1098590

## #3 — Gein, 2003-06-30T16:04Z

Hur skulle det se ut då?
Jag är inte så värst erfaren c-programmerare.

Permalänk: https://www.webforum.nu/p/1098608

## #4 — SPiN, 2003-06-30T16:12Z

```
#include <string>
...
ITEM *new_item( string *name, string *description ) {
...
}
```

Sög på string här i C++-forumet så hittar du säkert en hel del vad gäller strängar.

Permalänk: https://www.webforum.nu/p/1098617

## #5 — Gein, 2003-06-30T16:15Z

Men new_item är ingen funktion som jag har gjort. Den finns ju i menu.h. Jag kan väl inte ändra vad den ska ta in?

Permalänk: https://www.webforum.nu/p/1098618

## #6 — SPiN, 2003-06-30T16:16Z

Ah, sorry. Då blir det ju lite svårare. :)

Du **kan** ju, men risken är att det blir väldigt mycket jobb. :e

Jag kan knappt nån C++ alls, så jag har inga förslag att ge. :r

Permalänk: https://www.webforum.nu/p/1098619

## #7 — PeW, 2003-06-30T16:24Z

SPiN -\> Det är ett C-lib han har.

Gein-\>
Enda sättet som jag kan se det är att man kollar upp hur funktionen ser ut internt och gör en egen men med unsigned char istället för bara char (som är signed (-128) till 127). Förutsatt att man har tillgång till deklarationen av (structen) Item.

Permalänk: https://www.webforum.nu/p/1098625

## #8 — Gein, 2003-06-30T16:29Z

Det enda jag hittar om new_item i menu.h är

> extern NCURSES_EXPORT(ITEM \*)	new_item (const char \*,const char \*);

Inte mycket till en funktion i mina ögon.

Här är item-structen som finns i menu.h

```
typedef struct
{
  const char* str;
  unsigned short length;
} TEXT;

typedef struct tagITEM 
{
  TEXT           name;        /* name of menu item                         */
  TEXT           description; /* description of item, optional in display  */ 
  struct tagMENU *imenu;      /* Pointer to parent menu                    */
  void           *userptr;    /* Pointer to user defined per item data     */ 
  Item_Options   opt;         /* Item options                              */ 
  short          index;       /* Item number if connected to a menu        */
  short          y;           /* y and x location of item in menu          */
  short          x;
  bool           value;       /* Selection value                           */
                             
  struct tagITEM *left;       /* neighbour items                           */
  struct tagITEM *right;
  struct tagITEM *up;
  struct tagITEM *down;

} ITEM;
```

Permalänk: https://www.webforum.nu/p/1098628

## #9 — PeW, 2003-06-30T16:49Z

> Inte mycket till en funktion i mina ögon.

Nej, den är förkompilerad och ligger i ett lib så den kommer du inte åt. Deklarationen i menu.h är bara en garant för kompilatorn att det existerar en funktion som ser ut så.

Problemet är flera. Dels i structen TEXT och dels i prototypen för new_item. 

Vad är det som händer när du använder åäö? Ballar det ur eller blir det bara utskriftsfel? Är det bara utskriftfel kan det fungera att typa om till unsigned när du ska använda texten. Detta eftersom värdet ändå är detsamma men ö är detsamma som 246 i unsigned och (-10) i signed.

Permalänk: https://www.webforum.nu/p/1098650

## #10 — Gein, 2003-06-30T16:56Z

Det som händer är att menyn slutar vid det objektet. Alla tidigare objekt skrivs ut i menyn fram tills dess att ett felaktigt objekt förekommer. Programmet krashar alltså aldrig.
Jag använder aldrig texten själv, utan kör post_menu(min_meny) för att skriva ut menyn.

Permalänk: https://www.webforum.nu/p/1098662

## #11 — PeW, 2003-06-30T17:06Z

Oki...  den slutar antagligen därför att den läser åäö som strängterminering. Problemet är att du inte kommer åt att konvertera enskilt. Det skulle kunna fungera om man på något sätt kunde byta ut TEXT mot en egen struct (geinTEXT) och byggde en egen post_menu.

Permalänk: https://www.webforum.nu/p/1098671

## #12 — Gein, 2003-06-30T17:08Z

Men då antar jag att jag måste byta ut MENU-structen oxå, som använder sej av ITEM, och därmed funktioner som använder MENU. Det blir ju ohållbart :(
Jag som tänkte förlita mej en hel del på menu-biblioteket. :x

Permalänk: https://www.webforum.nu/p/1098674

## #13 — PeW, 2003-06-30T17:27Z

Lugn och fin nu  :)

Själva ITEM (och MENU) behövs inte bytas ut då de inte vet ett smack om unsigned eller signed. Den huserar TEXT och så vitt de vet. Enda tillfället som det kan fela är när post_menu ska skriva ut. Så med lite mer efterforskningar (problemet kan ju faktiskt ha uppstått för andra personer) så kanske det redan finns en lösning på det här.  

Börja med att söka på google om ncurses och svenska tecken  ;)

Permalänk: https://www.webforum.nu/p/1098681

## #14 — Gein, 2003-06-30T17:33Z

Patrik lugnar ner sej och blir finare.
Google -\> "ncurses svenska tecken"
Jag återkommer!

Permalänk: https://www.webforum.nu/p/1098685

## #15 — niko, 2003-06-30T17:39Z

Nu är inte \*nix min starka sida men det här:
<http://www.geocrawler.com/archives/3/344/2001/3/0/5459977/>
kanske kunde vara nåt? Det handlar om ncurses iaf.

Permalänk: https://www.webforum.nu/p/1098691

## #16 — PeW, 2003-06-30T18:03Z

Förmodligen kom lösningen här ovan eftersom det hela handlar om tolkningen av värdet på char  :)

Permalänk: https://www.webforum.nu/p/1098711

## #17 — Gein, 2003-06-30T18:10Z

> **PeW skrev:**
>
> Förmodligen kom lösningen här ovan eftersom det hela handlar om tolkningen av värdet på char  :)

Ja, det Niko postade va precis det problemet jag har, men jag löser det ändå inte. Nu inkluderar jag locale.h anropar setlocale (LC_ALL, "sv_SE"); både i main-funktionen samt mainmenu-funktionen (som är den funktion som skapar menyn). Men det funkar ändå inte. Går igenom kompilatorn, men samma fel.

Permalänk: https://www.webforum.nu/p/1098716

## #18 — Gein, 2003-06-30T18:21Z

Kollade efter lite noggrannare, setlocale returnerar NULL vilket betyder att något går snett när jag försöker sätta setlocale. 
Om jag lämnar det andra argumentet tomt "sv_SE" -\> "" så funkar det. Hittar den inte sv_SE kanske?

Permalänk: https://www.webforum.nu/p/1098725

## #19 — PeW, 2003-06-30T18:23Z

Det borde räcka att ha den i endast main.

Problemet är som sagt att endast char normalt sett är signed och du behöver att den är unsigned. Det ska gå att typa om direkt men å andra sidan kanske funktionen new_item gör nåt skumt med det som inte är signed och då blir det ju fel. Du kan ju testa att göra lite spårutskrifter på '\_din_item-\>name-\>str' för att se lite mer exakt vart det felar. Dvs om det är direkt eller i post_menu. 
(Eftersom TEXT även lagrar längden på strängen antar jag att den internt i new_item gör en strlen. I den kan det ju hända att värden under 0 antas som 0 och då blir det ju fel)

**edit**
Jag skriver alltid mina program i engelska så jag har inte testat setlocale. Men setlocale bör ju vara beroende av vad operativet har för inställningar så om det inte fungerar som det var tänkt kan det ju vara nån konfiguration där.

Permalänk: https://www.webforum.nu/p/1098730

## #20 — niko, 2003-06-30T18:26Z

> **Gein skrev:**
>
> Hittar den inte sv_SE kanske?

Vet inte. Men det du gjorde var nog rätt ändå:

> setlocale(LC_ALL, ""); // char encoding is that of shell, i.e. UTF-8

Källa: <http://groups.yahoo.com/group/unicode/message/9406>

Permalänk: https://www.webforum.nu/p/1098732

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/80923-new-item-menu-tar-inte-åäö  
Nästa sida: https://www.webforum.nu/amne/c-cpp/80923-new-item-menu-tar-inte-åäö/page2.md
