2016-10-18 3 views
0

Я пытаюсь реализовать код, где мне нужно переставить строку. Когда я пытаюсь выполнить мой код, я получаю следующие ошибки и предупреждения;Перенастройка строки

1.passing аргумент 1 из перестановочны делает целое число от указателя без приведения

2.expected полукокса, но аргумент имеет тип полукокса *

тип 3.conflicting для перестановочны

Что может вызвать эти ошибки в моей программе?

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 

void swap(char *first,char *second); 
void permute(char a,int l,int r); 

int main(){ 
    char str[] = "ABC"; 
    int size = strlen(str); 
    permute(str,0,size-1); 
    return 0; 
} 
void permute(char *a,int l,int r){ 
    if (l==r){ 
     printf("%s\n",a); 
    }else{ 
     int i; 
     for(i=l;i<=r;i++){ 
      swap((a+l),(a+i)); 
      permute(a,l+1,r); 
      swap((a+l),(a+i)); 
     } 
    } 

} 
void swap(char *first,char *second){ 
    char *temp; 
    *temp = *first; 
    *first = *second; 
    *second = *temp; 
} 
+0

Я изменил это ,,,,, но все же программа не работает –

+1

Разве это не то, что вы хотите для обмена? void swap (char * first, char * second) { char temp; temp = * first; * первая = * вторая; * second = temp; } – code82

+1

Вы должны отлаживать каждое из своих предложений один за другим. Strlen уже возвращает только количество символов. который будет равен 3 для «ABC», прохождение размера 1 уже неверно. Будут и другие проблемы, протестируйте свою функцию свопинга отдельно, как уже было задано – fayyazkl

ответ

3

В прототипе функции есть ошибка. Он объявлен как это:

void permute(char a,int l,int r); 

Но определяется следующим образом:

void permute(char *a,int l,int r) { 

Обратите внимание, что тип первого аргумента не соответствует. Вам нужно изменить прототип в соответствии с определением.

Не связанный с этим, ваша функция swap использует указатель temp, который разыменовывается без установки. Это неопределенное поведение и, вероятно, приведет к дампу ядра.

Поскольку вы меняете символы здесь, вам нужен только char, а не char *.

void swap(char *first,char *second){ 
    char temp; 
    temp = *first; 
    *first = *second; 
    *second = temp; 
} 
+0

код перестает работать без каких-либо предупреждений или ошибок :( –

+0

Thats, потому что длина строки короче. Strlen уже возвращает 3 для ABC, почему -1? Отладка вашего code – fayyazkl

0

Ваша ошибка в том, что ваш тип данных является символом для функции перестановки, где вы хотите, чтобы это был массив. Вы хотите использовать параметр char * a []. Permute должно быть

void permute(char *a[], int l, int r) 
+0

Хотя ошибка указана правильно, решение отсутствует. Либо ее char * a, либо char a []. Но не могут быть и обоими (изначально написали char * a []), то есть вы не проходите мимо указатель на массив символов. Вы либо передаете указатель на символ (который является первым элементом) (char * a) ИЛИ адрес первого элемента arary (char a []) – fayyazkl

Смежные вопросы