gpt4 book ai didi

c - 为什么我会遇到段错误?当所有函数都在 main 中时,它就可以工作

转载 作者:行者123 更新时间:2023-11-30 20:30:13 24 4
gpt4 key购买 nike

当我将代码保留在 main 的函数中时,代码可以工作,但是当将 char* 传输到 main 之外的其他函数时,我收到段错误。请帮忙!

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

void printArr(char *arr, int count) {

int x;
//print the sorted array:
for(x = 0; x < count; x++) {
printf("%s\n",arr[x]);
}
}

void sortArr(char *arr, int count) {

// sort the array in descending alphabetical order
int x, y;
char* temp = "";
for (x = 0; x < count; x++) {
for (y = x + 1; y < count; y++) {
if (strcmp(arr[x],arr[y]) <= 0) {
temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}

printArr(arr, count);

}

像这样的函数不允许 char * 被结转?

void tokenizeArr(char *string, char *arr, char *rest , int count) {

// tokenize the string
char* tok;

tok = strtok(string, rest);

int y = 0;

while (tok != NULL) {
arr[y] = tok;
tok = strtok(NULL, rest);
y++;
}

sortArr(arr, count);

}

int main(int argc, char **argv) {

// if there are not 2 arguments, return 0
if (argc != 2)
return 0;

/* if string is NULL return 0 */
if (argv[1] == NULL)
return 0;

/* loop through argv[1] to count how many words are in string */
int x;
int count = 0;


for(x = 0;x < strlen(argv[1]); x++) {

if (x == 0) {
if (!isalpha(argv[1][x])) {
// leave alone
}
}

// add count for word if string ends with a letter
else if(x == strlen(argv[1])-1 && isalpha(argv[1][x])) {
count++;
continue;
}

// add count for word if restricted character comes up and a letter is before it
else if(!isalpha(argv[1][x]) && isalpha(argv[1][x-1])) {
count++;
}
}

// create character pointer to string
char* string = argv[1];

// create an array the size of count
char* arr[count];

//create restrictions:
char rest[] = " \t\n\r\v\f1234567890,.?!@#$%^&*()-_=+]}[{;:<>/~`'";

tokenizeArr(string, arr, rest, count);

return 0;
}

我可以在代码中更改哪些内容以实现函数之间的平滑过渡?

错误诊断:pointersorter.c:在函数\u2018sortArr\u2019 中:pointorsorter.c:22:4:警告:传递\u2018strlen\u2019 的参数 1 使指针来自整数而不进行强制转换[默认启用]

if (strcmp(arr[x],arr[y]) <= 0) { ^在pointersorter.c:3:0 包含的文件中:/usr/include/string.h:395:15: 注意:预期为\u2018const char *\u2019 但参数的类型为\u2018char\u2019 extern size_t strlen (const char *__s) ^

pointersorter.c:22:4: 警告:传递\u2018strlen\u2019 的参数 1 使得

来自整数的指针,无需强制转换[默认启用] if (strcmp(arr[x],arr[y]) <= 0) { ^

在pointersorter.c:3:0包含的文件中:/usr/include/string.h:395:15: 注意:预期为\u2018const char *\u2019 但参数的类型为\u2018char\u2019 extern size_t strlen (const char *__s) ^

pointersorter.c:22:4:警告:传递\u2018__builtin_strcmp\u2019 的参数 1 使指针来自整数而不进行强制转换[默认启用] if (strcmp(arr[x],arr[y]) <= 0) { ^

pointersorter.c:22:4: 注意:预期为\u2018const char *\u2019 但参数类型为\u2018char\u2019

pointersorter.c:22:4:警告:传递\u2018__builtin_strcmp\u2019 的参数 2 使指针来自整数而不进行强制转换[默认启用]

pointersorter.c:22:4: 注意:预期为\u2018const char *\u2019 但参数类型为\u2018char\u2019

pointersorter.c:22:4: 警告:传递\u2018strlen\u2019 的参数 1 使得

来自整数的指针,无需强制转换[默认启用]在pointersorter.c:3:0 包含的文件中:/usr/include/string.h:395:15: 注意:预期为\u2018const char *\u2019 但参数的类型为\u2018char\u2019 extern size_t strlen (const char *__s) ^

最佳答案

您必须使用 char** 来表示字符串数组,并且您尝试使用 char* 来表示它。(因为 char* 是一个字符串)

关于c - 为什么我会遇到段错误?当所有函数都在 main 中时,它就可以工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54702372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com