2017-02-24 291 views
0

我的函数passwordschar**作为输入。我需要这个函数在一个位置放置一个特定的字符。我的程序崩溃,我不知道我做错了,但我已经将范围缩小到指针:指向Char阵列指针的指针

// The function 
int passwords(int num, int line, char** letters, char** ptrPassword, int length) { 
    char* password = *ptrPassword; 

    // Later in the code 
    password[location] = letters[line][0]; 
} 

这里是主我的电话:

char** password; 
password = malloc(length * sizeof(char)); 
location = length; 

//call function 
printf("Password at %d is %s \n", rank, passwords(rank, 0, letters, password, length)); 

我用指针不太经验,有人可以协助吗?

主营:

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

int passwords(int num, int line, char** letters, char** ptrPassword, int length); 
int lengthOfString(char* string); 
void print(char** letters, int length); 

int location; 

int main(){ 
    int numCase; 
    scanf("%d", &numCase); 

    int i, length; 
    for(i = 0; i < numCase; i++){ 
     scanf("%d", &length); 
     int j; 
     char** letters = malloc(length*sizeof(char*)); 

     for(j = 0; j < length; j++){ 
      letters[j] = calloc(26, sizeof(char)); 
      scanf("%s", letters[j]); 
     } 
     int rank; 
     scanf("%d", &rank); 

     //print(letters, j); 


     char* password; 
     password = malloc(length * sizeof(char)); 
     location = length; 

     //call recursion 
     printf("Password at %d is %s \n", rank, passwords(rank, 0, letters, &password, length)); 
    } 

    return 0; 
} 

整函数:

//recursive function 
int passwords(int num, int line, char** letters, char** ptrPassword, int length){ 
    char* password = *ptrPassword; 
    printf("Recursion #%d \n", line); 
    if(line == length-1){ 
     printf("Line is equal to length \n"); 
     if(num > lengthOfString(letters[line])){ 
      printf("IF \n"); 
      if(num % lengthOfString(letters[line]) == 0){ 
       password[location] = letters[line][lengthOfString(letters[line])]; 
      } 
      else{ 
       password[location] = letters[line][num % lengthOfString(letters[line]) - 1]; 
      } 
      printf("location: %d \n", location); 
      location--; 
      printf("Password is: %s \n", password); 
     } 
     else{ 
      printf("ELSE \n"); 
      if(num/lengthOfString(letters[line]) == 1){ 
       *password[location] = letters[line][0]; 
      } 
      else{ 
       printf("Alocation: %d \n", location); 
       password[location] = letters[line][num/lengthOfString(letters[line])]; 
      } 
      printf("Blocation: %d \n", location); 
      location--; 
      printf("Password is: %s \n", password); 
     } 
     return lengthOfString(letters[line]); 
    } 
    else{ 
     printf("Line is not equal to length \n"); 
     int scalar = passwords(num, ++line, letters, ptrPassword, length); 
     if (num > scalar){ 
      if(num % scalar == 0){ 
       password[location] = letters[line][lengthOfString(letters[line])]; 
      } 
      else{ 
       password[location] = letters[line][num % scalar - 1]; 
      } 
      location--; 
     } 
     else{ 
      if(num/scalar == 1){ 
       password[location] = letters[line][0]; 
      } 
      else{ 
       password[location] = letters[line][num/lengthOfString(letters[line])]; 
      } 
      location--; 
     } 
     return scalar * lengthOfString(letters[line]); 
    } 
} 
+0

你可以发布你的整个程序吗?不可能看到你在这里发布的内容有什么问题。 –

+0

您是否使用过像gdb这样的调试器?请张贴更多你的代码。 – Jarvis

+0

您遇到崩溃的输入是什么?你的程序也有编译错误,也许你的意思是'password [location]'而不是'* password [location]'。 – Jarvis

回答

1

改变这一行

printf("Password at %d is %s \n", rank, passwords(rank, 0, letters, &password, length)); 

printf("Password at %d is %d \n", rank, passwords(rank, 0, letters, &password, length)); 

由于你的passwords函数返回一个整数,而不是一个字符串(char *)。编译器警告也是如此。

+0

他应该也绝对不会传递指向指针的指针。 – Lundin