LINUX.ORG.RU

си, mysql, указатель на возвращаемую строку. почему си так себя ведет

 , ,


0

1

Вопрос в тексте кода

#include <stdio.h>
#include <stdlib.h>
#include "mysql.h"

MYSQL mysql;
MYSQL_RES *res;
//MYSQL_ROW row;

char **row;
char **chp;

unsigned int client_flag = 0;
unsigned int mysqlport = 3306;

void exiterr(int exitcode){
  fprintf(stderr, "%s\n", mysql_error(&mysql));
  exit(exitcode);
}

unsigned int i;

int main(void)
{
  i = 0;
  mysql_init(&mysql);
  if (!(mysql_real_connect(&mysql,"127.0.0.1","gst","pass","",mysqlport,NULL,client_flag))) exiterr(1);
  if (mysql_select_db(&mysql,"gst")) exiterr(2);
  if (mysql_query(&mysql,"select * from obox;")) exiterr(3);
  if (!(res = mysql_store_result(&mysql))) exiterr(4);

  while((row = mysql_fetch_row(res))) {
    for (i=0 ; i < mysql_num_fields(res); i++)
// если следующую строку расскоментить то printf выводит в консоль не понятные символы
//       chp = row;
       printf("%s ", row[i]);
      printf("\n");
  }
  if (!mysql_eof(res)) exiterr(5);
  mysql_free_result(res);
  mysql_close(&mysql);
  return 0;
}

★★★

Ответ на: комментарий от xaizek

тоже самое только без новой строки

# ./connect_mysql3
              ▒# ▒$ x&   ▒) ▒, ▒- X/ ▒0 2 x3 ▒4 86 ▒7 ▒9 @; ▒< 0> ▒?  A ▒B D ▒E  xH ▒IJ ▒L ▒M XO ▒P ▒R `T ▒U PW ▒X @Z ▒[ 0] ▒^  ` ▒a c ▒d  xg ▒hi ▒l ▒m Ho ▒p  

Vlad-76 ★★★ ()
Ответ на: комментарий от Vlad-76

Тогда не понятно. Изначальная проблема в отсутствии кавычек, это ясно. Но вот как присвоение левой переменной значения может влиять уже нет. UB не видно. Странно, что переменные глобальные, ну а так выглядит рабочим.

xaizek ★★★★★ ()
Ответ на: комментарий от Vlad-76

Тще — тухлый помидор в сторону кодингстайла не пишущих кучеряшки под предлогом «всёравно там в условии всегда одна строчка будет». За много лет пишу кучеряшки уже на автомате и таких глупых проблем никогда не возникало.

deep-purple ★★★★★ ()
Последнее исправление: deep-purple (всего исправлений: 1)