Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用c中的指针在2D数组中反转字符串数组_Arrays_C_Pointers - Fatal编程技术网

Arrays 使用c中的指针在2D数组中反转字符串数组

Arrays 使用c中的指针在2D数组中反转字符串数组,arrays,c,pointers,Arrays,C,Pointers,我需要编写一个函数,它接受一个2D字符串数组,接受数组中的每个字符串和,并将其反转 因此,如果有: {"first", "second", "third", "fourth"} 它将改为: {“tsrif”、“dnoces”、“driht”、“htruof”} 但它需要在不返回其他副本的情况下执行此操作,换句话说,我必须使用指针来重新排列它 方法签名如下所示: void reverseStrings(char st

我需要编写一个函数,它接受一个2D字符串数组,接受数组中的每个字符串和,并将其反转

因此,如果有:

{"first", "second", "third", "fourth"}
它将改为:

{“tsrif”、“dnoces”、“driht”、“htruof”}

但它需要在不返回其他副本的情况下执行此操作,换句话说,我必须使用指针来重新排列它

方法签名如下所示:

void reverseStrings(char strings[NUM_STRINGS][STRING_LENGTH]){
    char *ptr = &strings[0][0];
}
到目前为止,我有:

char* reverseOneString(char s[STRING_LENGTH]){
char temp;
char *p = &s[0];

while(*p != '\0'){
    p++;
}
return p;
}

void reverseStrings(char strings[NUM_STRINGS][STRING_LENGTH]){
printf("reversing strings\n");
char *ptr = &strings[0][0];

for(int i= 0; i < NUM_STRINGS; i++){
    char *nptr = reverseOneString(strings[i]) - 1;
    while(nptr >= ptr){
    
        char temp = *ptr;
        *ptr = *nptr;
        *nptr = temp;
        
        nptr--;
        ptr++;
        while(*ptr == "\0"){
        ptr++;
        }
    }
    printf("\n");
}
}
char*reverseOneString(chars[STRING\u LENGTH]){
焦炭温度;
char*p=&s[0];
而(*p!='\0'){
p++;
}
返回p;
}
无效反向字符串(字符字符串[NUM\u strings][STRING\u LENGTH]){
printf(“反转字符串\n”);
char*ptr=&字符串[0][0];
for(int i=0;i=ptr){
字符温度=*ptr;
*ptr=*nptr;
*nptr=温度;
nptr--;
ptr++;
而(*ptr==“\0”){
ptr++;
}
}
printf(“\n”);
}
}

但是它没有真正起作用

这就是我要找的,如果我解释得不好,很抱歉

char* reverseOneString(char s[STRING_LENGTH]){
    char temp;
    char *p = &s[0];
 
    while(*p != '\0'){
        p++;
    }
    p--;
    printf("one reverse is sending back %c\n", *p);
    return p;
}

void reverseStrings(char strings[NUM_STRINGS][STRING_LENGTH])
{
    char *ptr = &strings[0][0];
    printf("reversing strings\n");
    printf("First pointer is pointing to: %c\n", *ptr);

    for (int i = 0; i < NUM_STRINGS; i++) {
        int counter = 0;
        char* nptr = reverseOneString(strings[i]);
        while (nptr > ptr) {
            printf("ptr: %c  nptr: %c\n", *ptr, *nptr);

            char temp = *ptr;
            *ptr = *nptr;
            *nptr = temp;

            nptr--;
            counter++;
            ptr++;
            while(*ptr == '\0'){
                ++ptr;
            }        
        }
    
        ptr += STRING_LENGTH - counter;
        printf("this is the process value of ptr %c\n", *ptr);
        printf("\n");
    }

}
char*reverseOneString(chars[STRING\u LENGTH]){
焦炭温度;
char*p=&s[0];
而(*p!='\0'){
p++;
}
p--;
printf(“一个反面正在发回%c\n”,*p);
返回p;
}
无效反向字符串(字符字符串[NUM\u strings][STRING\u LENGTH])
{
char*ptr=&字符串[0][0];
printf(“反转字符串\n”);
printf(“第一个指针指向:%c\n”,*ptr);
for(int i=0;iptr){
printf(“ptr:%c nptr:%c\n”、*ptr、*nptr);
字符温度=*ptr;
*ptr=*nptr;
*nptr=温度;
nptr--;
计数器++;
ptr++;
而(*ptr=='\0'){
++ptr;
}        
}
ptr+=字符串长度-计数器;
printf(“这是ptr%c\n的过程值,*ptr);
printf(“\n”);
}
}

您的问题是什么?您尝试过什么?您遇到了什么具体问题?提示:使用
char**strings
而不是经常误导的数组变量,这意味着完全不同的内容。提示:您不能更改内联字符串。您需要先将其复制到可变缓冲区,否则您可以使用未定义的行为。@tadman,
char**strings
参数将不正确,如果作为
string
传递的变量声明为2Darray@tstanisl我用
{“first”,…}引用了“if have”注释
不可否认,它缺少类型定义。那么,你是说这就是你问题的答案吗?是的,我是这么说的。谢谢…然后你应该把它标记为已接受:)谢谢,哈哈。我仍然是堆栈溢出上的一个noob