gpt4 book ai didi

c - 关于 char 数组和指向它们的指针,我错过了哪些语法

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

我正在对我的一个程序进行一些测试,并且想知道为什么该程序在进入我的函数时崩溃。不要介意程序的逻辑,因为我仍处于确保我理解如何使用手头工具的阶段。

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

/* Constants */
#define HEX_CAPITAL_LETTERS_BEGIN 65
#define HEX_CAPITAL_LETTERS_END 90
#define HEX_NUMBERS_BEGIN 48
#define HEX_NUMBERS_END 57
#define EXIT_SUCCES 0

/* Prototypes */
void codeToField(char *charArray, int i, int hexFloor, int hexCeil, char *outputArray);

/* Main Function */
int main(void) {
char *code, warehouse, product, qualifiers;
int i = 0;

printf("Enter a MMOC product code: ");
scanf("%s", &code);

codeToField(code, i, HEX_CAPITAL_LETTERS_BEGIN, HEX_CAPITAL_LETTERS_END, &warehouse);
codeToField(code, i , HEX_NUMBERS_BEGIN, HEX_NUMBERS_END, &product);

strcpy(&qualifiers, code + i);

printf("\n\nWarehouse: %s\nProduct: %s\nQualifiers: %s\n", &warehouse, &product, &qualifiers);

return EXIT_SUCCES;
}

void codeToField(char *charArray, int i, int hexFloor, int hexCeil, char *outputArray) {
int j = 0;
while (charArray[i] >= hexFloor && charArray[i] <= hexCeil) {
outputArray[j] = charArray[i];
i++;
j++;
}
}

提前致谢。

最佳答案

首先,这不符合您的要求:

char *code, warehouse, product, qualifiers;

唯一的指针是code,其他的只是一个char。您使用 printf 将它们打印为字符串,并在函数中使用 warehouseproduct 作为 outputArray。它们也必须是指针(或数组):

char *code, *warehouse, *product, *qualifiers;

那么你需要内存。指针仍未初始化,因此从它们读取的任何内容都是未定义的行为。

您可以使用自动存储持续时间(在堆栈上)或动态(在堆上)分配内存。

堆栈:

char codestr[100];
code = codestr;

但是,您也可以将 code 声明为

char code[100];

避免有两个变量。

如果你想动态分配内存,你可以使用malloc:

code = malloc(100);

不要忘记再次释放内存:

free(code);

仓库产品限定符也都需要内存。一些数组大小可以从定义的常量中推导出来。

关于c - 关于 char 数组和指向它们的指针,我错过了哪些语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47065919/

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