我如何修改指针数组中的字符串?
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
已修改-已移除:飞船
以上是关于我如何修改指针数组中的字符串?的主要内容,如果未能解决你的问题,请参考以下文章