壳970527 发表于 2022-11-9 23:49:11

函数指针字符串交换只交换了头字母是为什么

本帖最后由 壳970527 于 2022-11-10 00:08 编辑

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

void printStrs(char **q, int n);
void swapStrs(char **q, int i, int j);

intmain(void)
{
char *p;
char osaka[] = "Osaka", kyoto[] = "Kyoto", shiga[] = "Shiga",
nara[] = "Nara", hyogo[] = "Hyogo", wakayama[] = "Wakayama";
int i, j;
p = osaka; p = kyoto; p = shiga; p = nara; p = hyogo; p = wakayama;
printStrs(p, 6);
while (1) {
printf("Input a pair of integers: ");
scanf("%d %d", &i, &j);
if(i < 0 || i > 5 || j < 0 || j > 5) break;
swapStrs(p, i, j);
printStrs(p, 6);
}
return 0;
}
void printStrs(char **q, int n)
{
int i;
printf("------ begin: print_string ------\n");
printf("0: %p %s\n", q,q);
printf("1: %p %s\n", q,q);
printf("2: %p %s\n", q,q);
printf("3: %p %s\n", q,q);
printf("4: %p %s\n", q,q);
printf("5: %p %s\n", q,q);
printf("------ end: print_string ------\n");
}
void swapStrs(char **q, int i, int j)
{
char temp;
temp = *q;
*q = *q;
*q = temp;
}


上面是写的代码,我交换之后发现只有头字母交换可是后面的字母全都没有交换这是为什么呀,哪里出现了问题,希望大佬能够回答下,谢谢!!

人造人 发表于 2022-11-10 00:24:29

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

void printStrs(char **q, int n);
void swapStrs(char **q, int i, int j);

int main(void) {
    char *p;
    char osaka[] = "Osaka", kyoto[] = "Kyoto", shiga[] = "Shiga",
         nara[] = "Nara", hyogo[] = "Hyogo", wakayama[] = "Wakayama";
    int i, j;
    p = osaka;
    p = kyoto;
    p = shiga;
    p = nara;
    p = hyogo;
    p = wakayama;
    printStrs(p, 6);
    while(1) {
      printf("Input a pair of integers: ");
      scanf("%d %d", &i, &j);
      if(i < 0 || i > 5 || j < 0 || j > 5)
            break;
      swapStrs(p, i, j);
      printStrs(p, 6);
    }
    return 0;
}

void printStrs(char **q, int n) {
    printf("------ begin: print_string ------\n");
    printf("0: %p %s\n", q, q);
    printf("1: %p %s\n", q, q);
    printf("2: %p %s\n", q, q);
    printf("3: %p %s\n", q, q);
    printf("4: %p %s\n", q, q);
    printf("5: %p %s\n", q, q);
    printf("------ end: print_string ------\n");
}

void swapStrs(char **q, int i, int j) {
    char *temp;
    temp = q;
    q = q;
    q = temp;
}

壳970527 发表于 2022-11-10 00:42:34

人造人 发表于 2022-11-10 00:24


谢谢大佬,成功了。请问下这个是什么原因呀,我知道具体传址的时候只会传第一个字符好像,但是不知道这样改之后的具体原因

人造人 发表于 2022-11-10 00:44:45

壳970527 发表于 2022-11-10 00:42
谢谢大佬,成功了。请问下这个是什么原因呀,我知道具体传址的时候只会传第一个字符好像,但是不知道这样 ...

你这是在做什么?
另外,把代码写好
void swapStrs(char **q, int i, int j)
{
char temp;
temp = *q;
*q = *q;
*q = temp;
}

壳970527 发表于 2022-11-10 00:52:08

人造人 发表于 2022-11-10 00:44
你这是在做什么?
另外,把代码写好

这个地方我想的就是把*q中的值和*q中的值互相交换- -

壳970527 发表于 2022-11-10 00:52:37

人造人 发表于 2022-11-10 00:44
你这是在做什么?
另外,把代码写好

谢谢大佬,以后会认真学习的,避免出现这些错误
页: [1]
查看完整版本: 函数指针字符串交换只交换了头字母是为什么