return 修改后的字符数组**
return a modified array of char**
C- 语言——-试图从 main() 调用函数“test”。这需要 3 个参数 argc、argv 和一个将字符串转换为小写或大写的指针函数。然后使用修改值数组我将循环并打印它们。
我收到分段错误。
我想要 return 整个数组。所以在我的 main() 中我将遍历它并打印它。我怎样才能做到这一点?我的代码哪里出错了?任何帮助都会很棒。
我相信答案可能与以下事实有关:您试图直接作用于字符串 1. 不使用 strcpy,以及 2. 使用指针数组 (char*) 而不是数组对象 (char []) 可能导致段错误。
抱歉,这更适合发表评论而不是回答,但不幸的是我还不能发表评论。 This 可能有帮助?
你的代码有一些不正确的地方,也是多余的。
您可以试试下面的代码
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
char **test(int argc, const char *const *argv, int (*const chnge)(int)){
char **retArr = malloc((argc+1) * sizeof(char*));
for (int i = 0; i < argc; ++i) {
const char *str = argv[i];
int len = strlen(str);
char* transform = malloc((len+1) * sizeof(char));
for (int j = 0; j < (len+1); ++j) {
transform[j] = chnge(str[j]);
}
retArr[i] = transform;
}
retArr[argc] = NULL; // An array of char* terminated by NULL
return retArr;
}
int main(int argc, const char *const *argv) {
char **val1 = test(argc, argv, &toupper);
char **val2 = test(argc, argv, &tolower);
for (char *const *p = val1, *const *q = val2; *p && *q; ++argv, ++p, ++q) {
printf("[%s] -> [%s] [%s]\n", *argv, *p, *q);
free(*p);
free(*q);
}
free(val1);
free(val2);
}
C- 语言——-试图从 main() 调用函数“test”。这需要 3 个参数 argc、argv 和一个将字符串转换为小写或大写的指针函数。然后使用修改值数组我将循环并打印它们。
我收到分段错误。
我想要 return 整个数组。所以在我的 main() 中我将遍历它并打印它。我怎样才能做到这一点?我的代码哪里出错了?任何帮助都会很棒。
我相信答案可能与以下事实有关:您试图直接作用于字符串 1. 不使用 strcpy,以及 2. 使用指针数组 (char*) 而不是数组对象 (char []) 可能导致段错误。
抱歉,这更适合发表评论而不是回答,但不幸的是我还不能发表评论。 This 可能有帮助?
你的代码有一些不正确的地方,也是多余的。 您可以试试下面的代码
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
char **test(int argc, const char *const *argv, int (*const chnge)(int)){
char **retArr = malloc((argc+1) * sizeof(char*));
for (int i = 0; i < argc; ++i) {
const char *str = argv[i];
int len = strlen(str);
char* transform = malloc((len+1) * sizeof(char));
for (int j = 0; j < (len+1); ++j) {
transform[j] = chnge(str[j]);
}
retArr[i] = transform;
}
retArr[argc] = NULL; // An array of char* terminated by NULL
return retArr;
}
int main(int argc, const char *const *argv) {
char **val1 = test(argc, argv, &toupper);
char **val2 = test(argc, argv, &tolower);
for (char *const *p = val1, *const *q = val2; *p && *q; ++argv, ++p, ++q) {
printf("[%s] -> [%s] [%s]\n", *argv, *p, *q);
free(*p);
free(*q);
}
free(val1);
free(val2);
}