Как перебрать указатель, содержащий массив в C - PullRequest
0 голосов
/ 02 марта 2020

плохо знакомы с C и с трудом понимают указатели. У меня есть задание, которое хочет, чтобы я передал слово в цепочку, а затем изменил слово. Я передал слово потоку в функцию, но я не знаю, как его перебрать. Какой правильный синтаксис?

void *reverse_string(void *str)
{
    // This function is called when the new thread is created
    printf("In funciton reverse_string(). The value is %s\n", str);
    char *p = (char *)str;  
    for(int i = 0; i < 7; i++) // loop not working for printing elements in array
    {
        p[i] = i;
        printf("%s ....\n", p);
    }


    pthread_exit(NULL); // exit the thread
}

int main(int argc, char *argv[])
{
    /* The main program creates a new thread and then exits. */
    pthread_t threadID;
    int status; 
    char * word = "SkAtIng";
    //char *p = word;

    printf("In function main(): Creating a new thread\n");
    // create a new thread in the calling process
    // a function name represents the address of the function
    status = pthread_create(&threadID, NULL, reverse_string, (void*) word);

    // After the new thread finish execution
    printf("In function main(): The new thread ID = %d\n", threadID);

    if (status != 0) {
        printf("Oops. pthread create returned error code %d\n", &status);
        exit(-1);
    }
    printf("\n");

    exit(0);
}

1 Ответ

0 голосов
/ 02 марта 2020

Вы имеете в виду что-то вроде этого:

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

void reverse_string(char *str)
{
    int len = strlen(str) - 1, i;
    if (len <= 0)
        return;
    for (i = 0; i < len / 2; i++) {
        char tmp = str[i];
        str[i] = str[len - i];
        str[len - i] = tmp;
    }
}

int main()
{
    char word[] = "SkAtIng";
    printf("original word: %s\n", word);
    reverse_string(word);
    printf("reversed word: %s\n", word);
    return 0;
}

?

Пара нюансов:

  1. Вам не нужны никакие темы

  2. Определение char *word = "blahblah" предполагает, что строка является данными только для чтения (иначе говоря, const) и обычно недоступна для записи (генерирует исключение), в отличие от того, что char word[] = "blah-blah" размещает массив локально в стеке.

  3. В reverse_string() значении мы обмениваемся значениями , а не значениями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...