gpt4 book ai didi

c - 来自字符串的意外返回值

转载 作者:行者123 更新时间:2023-12-02 08:14:15 25 4
gpt4 key购买 nike

我试图从传递给 getPhoneNumber(char[] str) 的字符串中获取电话号码,但出于某种原因,我每次运行时都会附加一些随机字符代码,我需要帮助。

源代码

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


char* getPhoneNumber(char str[]);

int main(){

getPhoneNumber("AT+CMGR=5 \n+CMGR: \"REC READ\",\"+9349036332058\",\"samuel\",\"17/03/31,20:44:52+04\"\nHOW THINS fa OK");

return 0;
}

char* getPhoneNumber(char str[]){

char *temp = strchr(str, ',')+2;
const unsigned short len1 = strlen(temp);

printf("value in temp : %s\n\n",temp);

char *strPtr = strchr(temp, '\"');
const unsigned short len2 = strlen(strPtr);

printf("value in strPtr : %s\n\n",strPtr);
int phone_num_len = len1-len2;

char phone_num[phone_num_len];

strncpy(phone_num, temp,phone_num_len);

printf("Phone number : %s",phone_num);

}

出于调试目的,我还打印了 tempstrPtr 的各个值,但返回值似乎没问题。程序的输出如下图所示。

enter image description here

最佳答案

您没有为 phone_num 留出足够的空间。结果,printf 读取了数组末尾。这会调用 undefined behavior .这就是为什么您在本地运行时会看到额外的字符,但它似乎在 ideone 上运行良好(它似乎对我来说也运行良好)。

字符串的空终止字符还需要一个字节。此外,您需要手动添加该空终止符,因为 strncpy 函数不会为您执行此操作,因为 phone_num_len 字节内没有空终止符 temp.

char phone_num[phone_num_len+1];

strncpy(phone_num, temp,phone_num_len);
phone_num[phone_num_len] = '\0';

关于c - 来自字符串的意外返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43477964/

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