gpt4 book ai didi

C - 无法编辑或打印字符数组

转载 作者:太空宇宙 更新时间:2023-11-04 03:50:24 25 4
gpt4 key购买 nike

新手问题...当我在函数中时,我应该如何正确处理表示字符串的可变字符数组?我在做这个

char temp[BASE10LENGTH_DEGREE_DECIMALS+1]; //aka length of 7
memset(temp, 0, sizeof(temp));

如您所见,其中包含空终止符。但是如果我做这样的事情

temp[i] = '1'; //when i = 0

然后在 temp 上调用 atoi(),我得到 0。编辑 2:不,我没有!但是我仍然无法在调试器中打印它。

此外,如果我查看调试器,temp 不会扩展为数组,并且在其上使用 lldb 的打印功能会给我这个

(lldb) print temp
error: incomplete type 'char []' where a complete type is required
error: 1 errors parsing expression

如果我使用 char* 并 malloc 它,它会起作用,但这不是我想要做的。我只想要一个字符数组。我做错了什么?

编辑:这是整个方法。输入为“3、4、5”,len为7:编辑 2:实际上,atoi 的问题是因为我通过输入小于 9 和大于 0 而不是小于“9”和大于“0”来搞乱那些 if 语句...粗心的错误。

struct Coordinates{
unsigned int longitude;
unsigned int latitude;
unsigned short altitude;
};

struct Coordinates* getCoordinatesFromString(char* input, int len){
struct Coordinates* ret = malloc(sizeof(struct Coordinates));

char temp[BASE10LENGTH_DEGREE_DECIMALS+1];
memset(temp, '\0', sizeof(temp));
int i = 0; int i2 = 0; char currentChar;
while (input[i]!=','){
if (i>=len)
return NULL; //out of bounds error
currentChar = input[i];
if ((currentChar>=0 && currentChar<=9) || currentChar=='.') temp[i2] = currentChar;
i++;
i2++;
}
ret->latitude = atoi(temp);
memset(temp, 0, sizeof(temp));
i++; i2 = 0;
while (input[i]!=','){
if (i>=len)
return NULL; //out of bounds error
currentChar = input[i];
if ((currentChar>=0 && currentChar<=9) || currentChar=='.') temp[i2] = currentChar;
i++;
i2++;
}
ret->longitude = atoi(temp); //keeps giving me zero
memset(temp, 0, sizeof(temp));
i++; i2 = 0;
while (input[i]!=','){
if (i>=len)
break;
currentChar = input[i];
if ((currentChar>=0 && currentChar<=9) || currentChar=='.') temp[i2] = currentChar;
i++;
i2++;
}
ret->altitude = atoi(temp);
memset(temp, 0, sizeof(temp));

return ret;
}

最佳答案

当您找到逗号时,您将跳过逗号 (++i),但您输入的下一个输入字符是空格,因此 temp[0] 以空字符结尾,这意味着 atoi() 将返回 0。您需要跳过逗号和空格。

或者,如果您的输入字符串以 null 结尾,您可以使用 C 运行时库中的 strtok() 函数来简化您的代码。示例:

#include <string.h>

struct Coordinates* getCoordinatesFromString(char* input)
{
struct Coordinates* ret = malloc(sizeof(struct Coordinates));
int part = 0;

if (ret != NULL) {
char *s = strtok(input, ",");
while (s != NULL && part < 3) {
int value = atoi(s);

switch(++part) {
case 1:
ret->latitude = value;
break;
case 2:
ret->longitude = value;
break;
case 3:
ret->altitude = value;
break;
}

s = strtok(NULL, ",");
}

/* if input was not valid, return NULL */
if (part < 3) {
free(ret);
ret = NULL;
}
}

return ret;
}

关于C - 无法编辑或打印字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21033058/

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