简体   繁体   中英

Swap char with table pointers in C

I'm trying to swap two char with two table pointers. Can someone explain to me what's wrong in my code? The terminal says char** is expected but I don't know what to do, so I think I don't really understand how pointers work for tables.

void echangeM2(char **ptab1, char **ptab2){

  char *tmp = *ptab1;
  *ptab1 = *ptab2;
  *ptab2 = *tmp;
  printf("%s\t %s",*ptab1,*ptab2);

  return;
}

int main(void) {
  char tab1[25];
  char tab2[25];
  char *adtab1;
  char *adtab2;
  *adtab1 = &tab1;
  *adtab2=&tab2;
  printf("type two words");
  scanf("%s %s",tab1,tab2);
  echangeM2(adtab1,adtab2);
  return 0;
}

The following code should work for you:

#include <stdio.h>

void exchangeM2(char* *ptab1, char* *ptab2) { // accepts pointer to char*
  char* tmp = *ptab1;  // ptab1's "pointed to" is assigned to tmp
  *ptab1 = *ptab2;     // move ptab2's "pointed to" to ptab1
  *ptab2 = tmp;        // now move tmp to ptab2
  printf("%s\t %s",*ptab1,*ptab2);
}

int main(void) {
  char tab1[25];
  char tab2[25];
  char* adtab1;
  char* adtab2;
  adtab1 = tab1;  // array name itself can be used as pointer
  adtab2 = tab2;
  printf("type two words");
  scanf("%s %s",tab1,tab2);
  exchangeM2(&adtab1, &adtab2);  // pass the address of the pointers to the function
}
echangeM2(&adtab1,&adtab2); 

This should fix the compile errors. You are passing char* pointers to a function that expects a char ** pointer

Edit: Actually looks like you want something like

char **adtab1;
char **adtab2;
adtab1 = &tab1;
adtab2=&tab2;
...
echangeM2(adtab1,adtab2);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM