обратная строка без нового массива - PullRequest
0 голосов
/ 19 марта 2010

привет, кто-нибудь может сказать мне ошибку в этом?

#include<stdio.h>

int main()
{
    char a[]="abcdefgh";
    int i=0;
    int n=strlen(a);
    char *first;
    char *second;
    char *c;
    *first=a[0];
    *second=a[7];
    for(i=0;i<=n/2;i++)
    {
            *c=*first;
            *first=*second;
            *second=*c;
            first++;
            second--;
    }

    for(i=0;i<=7;i++)
    {
            printf("%c",a[i]);
    }
}

Ответы [ 2 ]

5 голосов
/ 19 марта 2010

Проблема в следующих строках:

*first=a[0];
*second=a[7];

Я думаю, что вы хотите, чтобы first и second указывали на правильные элементы, а именно:

first = &a[0]; // address of the first element
second = &a[7]; // address of the eighth element

То, что у вас есть, это присвоение значения a[0] адресу, указанному first, который не инициализирован. Кроме того, вы можете также использовать n - 1 вместо 7, чтобы не указывать размер жестко. Также эти строки:

*c=*first;
*first=*second;
*second=*c;

Видите ли, указатель c также не был инициализирован. То, что вы должны сделать, не иметь c в качестве указателя:

char c;

Затем используйте его как обычную переменную:

c = *first;
*first = *second;
*second = c;

И просто примечание к дизайну, вам не нужен счетчик / цикл. Скорее, вы знаете, что вы закончили с second is <= to <code>first (то есть мы находимся на полпути или уже перешли):

while (second > first)

Наконец, через некоторые пробелы! Ваш код очень сжат и труден для чтения. Не бойтесь разбрасывать вещи.

2 голосов
/ 19 марта 2010
    *first=a[0];

Указатель first не инициализирован, поэтому вы назначаете неверную память.

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