Question

This code cannot convert char* to char**. I don't know what it means.

Here is my code:

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

shift( char *s[] , int k )
{
  int i,j;
  char temp[50];

  for( i = 0 ; i < k ; i++ )
    temp[i]=*s[i] ;

  for( j = 0 ; j < strlen(*s) ; j++ )
    {
      *s[j] = *s[k] ;
      k++ ;
    }

  strcpy(*s,temp);

}

main()
{
  int i,j=0,k;
  char s[30];

  printf("please enter first name ");
  gets(s);

  scanf("%d",&k);
  shift( &s , k);
  puts(s);

  getch();
}

The program is supposed to:

read string S1 and index ‘K’, then call your own function that rotates the string around the entered index. The output of your program should be as follows:

Enter your string:  AB3CD55RTYU
Enter the index of the element that rotates the string around: 4

The entered string:  AB3CD55RTYU
Enter the element that rotates the string around:  D

The rotated string is :  D55RTYUAB3C
Was it helpful?

Solution

&s means char (*)[30](pointer to array of char[30]) not char *[] (array of pointer to char)

For example, It modified as follows.

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

void shift(char s[],int k){
    int i, len;
    char temp[50];

    for(i=0;i<k;i++)
        temp[i]=s[i];
    temp[i] = '\0';
    len = strlen(s);
    for(i=0;k<len;i++)
        s[i]=s[k++];
    strcpy(&s[i],temp);
}

int main(){
    int k;
    char s[30];
    printf("please enter first name ");
    gets(s);
    scanf("%d", &k);
    shift(s , k);
    puts(s);
    getch();
    return 0;
}

OTHER TIPS

example using a structure(Copy is performed). However, this is waste of resources.

#include <stdio.h>
#include <conio.h>

typedef struct word {
    char str[30];
} Word;

Word shift(Word word, int k){
    Word temp;
    int i = 0, j;

    for(j=k;word.str[j]!='\0';++j)
        temp.str[i++]=word.str[j];
    for(j=0;j<k;++j)
        temp.str[i++]=word.str[j];
    temp.str[i] = '\0';
    return temp;
}

int main(){
    int k;
    Word w;
    printf("please enter first name ");
    gets(w.str);
    scanf("%d", &k);
    w=shift(w , k);
    puts(w.str);
    getch();
    return 0;
}
shift(char* s[],int k); //shift expects char**; remember s[] is actually a pointer

main()
{
  char s[30]; // when you declare it like this s is a pointer.
  ...
  shift(s , k); 
}

You should change the shift function signature to shift(char* s,int k); since you don't really need pointer to pointer. You just need to pass the beginning of the array.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top