gpt4 book ai didi

c - 为什么 __libc_start_main 出现在字符串数组中

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

以下是我的代码,只是一个strok的例子

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#define NUMBER_OF_STRINGS 10
int main(){
char str[] = " SELECT CID FROM ACN WHERE ACN=:C1 AND ACCTNAME=:C2#/ROWS=30/USING=(C1=70,C2='OD100S')";
char *strs[NUMBER_OF_STRINGS];
int i = 0;
for (char *p = strtok(str," "); p != NULL; p = strtok(NULL, " "))
{
if(i < NUMBER_OF_STRINGS){
strs[i] = malloc(strlen(p)+1);
strcpy(strs[i], p);
i++;
} else {
break;
}
}

for(i = 0 ; i < NUMBER_OF_STRINGS ; i++){
if(strs[i] != NULL)
printf("%s\n",strs[i]);
}

return 0;
}

当打印 strs 数组时,我得到

[root@prf01 /]# ./test
SELECT
CID
FROM
ACN
WHERE
ACN=:C1
AND
ACCTNAME=:C2#/ROWS=30/USING=(C1=70,C2='OD100S')
__libc_start_main

我不知道为什么“__libc_start_main”字符串存储在我的数组中

请帮我清除它,谢谢!

最佳答案

您正在读取未初始化的指针,即 undefined behaviour .

您只有 i 个字符串 循环之后,没有 NUMBER_OF_STRINGS 个字符串。

您可以在循环后将字符串总数存储在另一个变量中,并在打印时使用它。

 for (char *p = strtok(str," "); p != NULL; p = strtok(NULL, " "))
{
....
}

size_t num = i;

for(i = 0 ; i < num ; i++){
if(strs[i] != NULL)
printf("%s\n",strs[i]);
}

关于c - 为什么 __libc_start_main 出现在字符串数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34918274/

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