Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2019, 08:09   #1
atztek
Пользователь
 
Регистрация: 08.02.2019
Сообщений: 13
По умолчанию Проблема с выводом строкового массива

Написал небольшой код (Си), в котором почему-то значения массива выводятся некорректно. Пожалуйста подскажите в чем проблема.


Код:
#include <stdio.h>
#include <string.h>
 
char a[2]      = {130123456789, 2};
 
int main(int argc, char* argv[]) {
 
// ====================================================
    FILE *file_01;
 
    if((file_01   = fopen("OUT_a.txt","w"))==NULL) {
        printf("CANNOT OPEN FILE OUT_a.txt 'w'\n");
        exit(1);
    };
 
    fwrite(a, strlen(a), 1, file_01);
 
    fclose(file_01);
 
// ====================================================
 
 
 
// ====================================================
 
    if((file_01   = fopen("OUT_a.txt","r"))==NULL) {
        printf("CANNOT OPEN FILE OUT_a.txt 'r'\n");
        exit(1);
    };
 
 
    int x0 = sizeof(a);
    char b[x0];
 
    printf("\n x0 = %i \n", x0);
 
//  int k = fread( b, sizeof(char), sizeof(b), file_01);
    int k = fscanf(file_01,"%s",b);
 
    printf("\n k = %i \n", k);
 
    int x1;
 
    for(x1=0; x1<sizeof(b); x1++){
        printf("\n b[%i] = %c ", x1, b[x1]);
    }
 
    fclose(file_01);
 
// ====================================================
 
 
    printf("\n\nRUN PROGRAM DONE!\n");
 
    return 0;
}
atztek вне форума Ответить с цитированием
Старый 08.02.2019, 08:43   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,329
По умолчанию

Код:
char a[2] = {130123456789, 2};
По вашему это что?
Код:
int x0 = sizeof(a); char b[x0];
По вашему это что?
Цитата:
Сообщение от atztek Посмотреть сообщение
значения массива выводятся некорректно
А как должно быть корректно или мы должны сами догадаться.
waleri вне форума Ответить с цитированием
Старый 08.02.2019, 08:52   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

В том, что вы не задумываетесь что пишите.

Цитата:
Сообщение от atztek Посмотреть сообщение
char a[2] = {130123456789, 2};
Как вы в чар собрались запихнуть 130123456789?

Цитата:
Сообщение от atztek Посмотреть сообщение
fwrite(a, strlen(a), 1, file_01);
Выведите strlen(a) на консоль и несколько раз позапускайте программу, удивитесь.

Цитата:
Сообщение от atztek Посмотреть сообщение
int k = fscanf(file_01,"%s",b);
У вас же не строка в файле.
p51x вне форума Ответить с цитированием
Старый 08.02.2019, 09:49   #4
atztek
Пользователь
 
Регистрация: 08.02.2019
Сообщений: 13
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Как вы в чар собрались запихнуть 130123456789?
Пожалуйста напишите конкретнее что неверно?
Я отношусь к '130123456789' как к тексту, а не переменной типа int.

Или Вы имеете в виду что вместо 'char' нужно использовать 'string'?

Я не знаком с синтаксом, пытался найти примеры в интернете, но не нашел.



Цитата:
Сообщение от waleri Посмотреть сообщение
По вашему это что?
Код:

int x0 = sizeof(a); char b[x0];
Здесь sizeof(a) = 2, т.о. новый массив b[] создается такого же размера что и a[].
Вроде бы с этим не было проблем.

- - -

Вот что получаю после компиляции:

Цитата:
Output:

x0 = 2

k = 1

b[0] = 
b[1] = 

RUN PROGRAM DONE!
atztek вне форума Ответить с цитированием
Старый 08.02.2019, 09:51   #5
atztek
Пользователь
 
Регистрация: 08.02.2019
Сообщений: 13
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
А как должно быть корректно или мы должны сами догадаться.
На этом примере я пытаюсь разобраться как создать массив, сохранить его в файл, затем прочитать массив из файла и вывести на экран.
atztek вне форума Ответить с цитированием
Старый 08.02.2019, 10:01   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,329
По умолчанию

Цитата:
Сообщение от atztek Посмотреть сообщение
Я отношусь к '130123456789' как к тексту
Важно не как вы относитесь а как к этому относится компилятор.
Где здесь, по вашему, текст?
waleri вне форума Ответить с цитированием
Старый 08.02.2019, 10:05   #7
atztek
Пользователь
 
Регистрация: 08.02.2019
Сообщений: 13
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Важно не как вы относитесь а как к этому относится компилятор.
Где здесь, по вашему, текст?
Пытался эти значения взять в кавычки, но компилятор этого не принял.
Пожалуйста напишите как правильно?
atztek вне форума Ответить с цитированием
Старый 08.02.2019, 10:54   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Тогда уж
Код:
char* a[2]      = {"130123456789", "2"};
Но тогда все ваши чтения/записи вылядят еще более странно...
p51x вне форума Ответить с цитированием
Старый 08.02.2019, 11:09   #9
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,545
По умолчанию

.........

Последний раз редактировалось digitalis; 08.02.2019 в 11:11. Причина: опять удаление :(
digitalis вне форума Ответить с цитированием
Старый 08.02.2019, 11:28   #10
atztek
Пользователь
 
Регистрация: 08.02.2019
Сообщений: 13
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
char* a[2] = {"130123456789", "2"};
Но тогда все ваши чтения/записи выглядят еще более странно...
Это прошло нормально, но теперь 'х0' (размер массива)
int x0 = sizeof(a);
возвращает 8 вместо 2.



Цитата:
Сообщение от digitalis Посмотреть сообщение
char - это один символ = байт.
Я пытался подключить
#include <string.h>
и создать массив при помощи 'string a[]' вместо 'char a[]', но ничего не получилось.
Возможно я что-то сделал не так?!


После изменения кода по совету p51x:

Код:
char* a[2]      = {"130123456789", "2"};

int main(int argc, char* argv[]) {

	printf("\n a[0] = %s", a[0]);
	printf("\n a[1] = %s", a[1]);
. . .
получил:

Цитата:
a[0] = 130123456789
a[1] = 2
Т.е. компилятор понимает что это стринг, а не одиночный символ.
atztek вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с выводом массива arduinhsik Помощь студентам 0 09.12.2018 01:12
Ошибка при выводе строкового массива Bugrimov Общие вопросы C/C++ 25 02.04.2012 22:40
Считывание данных из строкового массива exe NiKiToZZ- Помощь студентам 0 08.01.2011 18:21
Сортировка строкового массива Vikenty Помощь студентам 2 24.05.2010 00:06
проблема с выводом элемента из массива kirosin JavaScript, Ajax 4 15.01.2010 23:35