我如何修改指针数组中的字符串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何修改指针数组中的字符串?相关的知识,希望对你有一定的参考价值。

我编写了以下代码,总之应该根据主函数中的键数组对用户输入的消息进行“加密”,例如,如果用户输入单词“ holidays”,则应将其打印为“ qoervmhj” ,如果输入为“ SILVER”,则输出应为“ LOSCTK”,依此类推。现在,当我尝试运行代码时,由于某些原因,它只打印输入而不进行修改,我无法查明问题,我怀疑它与crypto_words函数有关,我的思考过程是因为“ words”是一个指针数组,我可以访问“ words [i]”的内容,对其进行加密,然后将其复制回“ words [i]”,但是现在我不确定,将不胜感激。

      /*-------------------------------------------------------------------------
  Include files:
--------------------------------------------------------------------------*/

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

#define KEY_SIZE 52
#define WORDS_ARRAY_SIZE 100
#define MAX_STR_LEN 50
#define ARR_PLACE 71

char encrypt_char(unsigned char key[KEY_SIZE], char ch);
int read_words(char* words[], int size, int max_str_len);
void encrypt_words(char* words[], int num_words, unsigned char key[KEY_SIZE]);
void release_memory(char* words[], int num_words);

void print_words(char* words[], int num_words)

    int i;
    for ( i = 0; i < num_words; i++) 
        printf("%s\n", words[i]);
    


/*--------------------------------------------------------------------------------------------*/

int main()

    unsigned char key[KEY_SIZE] = 

        '>', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '~', 'S', 'D',
        'F', 'G', '*', 'J', 'K', 'L', 'Z', 'X', 'C', 'V', 'B', '+', 'M',
        'm','b','n','v','z','c','@','q','r','u','i','e','r',
        't','o','p','w','$','j','g','d','%','s','f','h','k'
    ;
    int num_words =0, i;
    char* words[WORDS_ARRAY_SIZE];

    for ( i = 0; i < WORDS_ARRAY_SIZE; i++) 
        words[i] = NULL;
    

    num_words = read_words(words, WORDS_ARRAY_SIZE, MAX_STR_LEN);
    if (num_words == -1)
    
    printf("Failed to read words.\n");
    return 0;
    
    encrypt_words(words, num_words, key);
    print_words(words, num_words);
    release_memory(words, num_words);
    return 0;


/*--------------------------------------------------------------------------------------------*/
char encrypt_char(unsigned char key[KEY_SIZE], char ch)

    int temp=0;
    if(ch>='A' && ch<='Z')
        
        temp=ch-'A';
        

    else if(ch>='a' && ch<='z')
        
        temp=ch-ARR_PLACE;
        

    return key[temp];


/*--------------------------------------------------------------------------------------------*/

int read_words(char* words[], int size, int max_str_len)

    int counter=0;
    int length=0;
    char tempWord[max_str_len];
    while(counter<size && (scanf("%s", tempWord)!=EOF))
        
          length=strlen(tempWord);
          words[counter] = (char*)malloc(sizeof(char)*(length)+1);
          if(words[counter]==NULL)
          
              return -1;
          

          strcpy(words[counter], tempWord);
          counter++;
          continue;
        



    return counter;



/*--------------------------------------------------------------------------------------------*/

void encrypt_words(char* words[], int num_words, unsigned char key[KEY_SIZE])

    char tempArr[MAX_STR_LEN];
    for(int i=0; i<num_words; i++)
    
        strcpy(tempArr, words[i]);
        int length=strlen(tempArr);
        for(int j=0; j<length; j++)
        
            encrypt_char(key, tempArr[j]);
        

        strcpy(words[i],tempArr);
    



/*--------------------------------------------------------------------------------------------*/

void release_memory(char* words[], int num_words)

    int i=0;
    while(i<num_words)
    
        free(words[i]);
        i++;
    

答案

函数encrypt_char()返回加密的字符,但是您没有分配它。在encrypt_words()中,您需要执行以下操作:

tempArr[j] = encrypt_char(key, tempArr[j]);

有了这个,我得到了预期的输出:

$ ./a.out
SILVER
LOSCTK
另一答案

问题太大了。尝试简短地自我介绍,只需按照您的要求发布必要的代码如何修改指针数组中的字符串?

这里是:

#include <stdio.h>

int main()

    char *sports[] = 
                     "golf",
                     "hockey",
                     "football"
                 ;

    printf("as in array of pointers : %s\n",sports[1]);
    sports[1]="hockeylll";
    printf("modified - added : %s\n",sports[1]);
    sports[1]="hock";
    printf("modified - removed : %s\n",sports[1]);


    return 0;

输出:

如指针数组:曲棍球

修改-添加:hockeylll

已修改-已移除:飞船

以上是关于我如何修改指针数组中的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用指针检查数组中的某个位置是不是被修改

第二次作业

C语言,用指针方式定义的字符串为啥不能修改?

如何通过c中的指针传递二维数组[重复]

leetcode-双指针遍历

leetcode-双指针遍历