манипулирование символьной строкой в ​​C - PullRequest
0 голосов
/ 03 февраля 2012

Моя голова искажается, пытаясь понять это.

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

Я думал, что это было бы просто, и, вероятно, когда-то я понимаю использование.

Я думал, что я настрою переменную, используя char stg_array[80], что даст мне максимальный размер 80 символов.

Я бы тогда сделал

while( (stg_array[i] = getch() ) != '\n' )
{
    i++;
}

Тогда я бы использовал strlen(), чтобы определить фактическую длину (я понимаю, что она у меня уже есть, просто хочу использовать strlen() для практики) и перейти в цикл for, который будет отсчитывать от strlen(stg_array)-1

printf("Array[%d] = %s Hex Value = %X", i, stg_array[i], i );

Я понимаю ошибку переполнения буфера, которая может возникнуть, если пользователь наберет более 80 символов. Не волнуйтесь об этом прямо сейчас.

То, что я получаю, это то, что strlen() возвращает длину в первый пробел в тексте.

Если я пропущу пользовательский ввод и просто сделаю char stg_array[80]={"The quick brown fox."} с фиксированным циклом for в середине, скажем, 10, программа вылетает.

Я думаю, что собираюсь пообедать о том, как работают строковые массивы C.

Ответы [ 2 ]

1 голос
/ 03 февраля 2012

Надеюсь, что поможет следующее:

#include <stdio.h>

#define MAX 80

int main(void)
{
    char stg_array[MAX];
    int i = 0, j;
    int len;

    printf("Enter String : ");
    while((i < MAX-1) && ((stg_array[i] = getchar()) != '\n')) {
        i++;
    }
    stg_array[i] = '\0';

    for (j=i ; j>=0 ; j--) {
        printf("stg_array[%d] = %c / %x \n", j, stg_array[j], stg_array[j]);
    }

    return 0;
}

Вывод:

Enter String : this is a test string
stg_array[21] =  / 0 
stg_array[20] = g / 67 
stg_array[19] = n / 6e 
stg_array[18] = i / 69 
stg_array[17] = r / 72 
stg_array[16] = t / 74 
stg_array[15] = s / 73 
stg_array[14] =   / 20 
stg_array[13] = t / 74 
stg_array[12] = s / 73 
stg_array[11] = e / 65 
stg_array[10] = t / 74 
stg_array[9] =   / 20 
stg_array[8] = a / 61 
stg_array[7] =   / 20 
stg_array[6] = s / 73 
stg_array[5] = i / 69 
stg_array[4] =   / 20 
stg_array[3] = s / 73 
stg_array[2] = i / 69 
stg_array[1] = h / 68 
stg_array[0] = t / 74 
0 голосов
/ 03 февраля 2012

Вам нужно исправить то, что вы даете в качестве аргумента для %X в printf, тогда вы не должны использовать char stg_array[80]={'The quick brown fox.'} (Это не должно даже компилироваться, давая вам «односимвольную константу, слишком длинную для ее типа» ошибка), но вместо этого char *stg_array="The quick brown fox." (я заменил char [80] на char *, потому что это более правильно, но вы можете оставить свой, если хотите).

Если strlen () возвращает значение, оно всегда верно. strlen () никогда не вернет индекс первого пробела в строке, если вы думаете, что он сделал что-то не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...