在C语言中获取变量值
我一直在努力处理一个代码位,在它被分割成一个较小的子字符串后输出字符串内容 拆分字符串的部分的工作方式与预期的大致相同。我正在努力解决的问题是,当数组内容从在C语言中获取变量值,c,string,C,String,我一直在努力处理一个代码位,在它被分割成一个较小的子字符串后输出字符串内容 拆分字符串的部分的工作方式与预期的大致相同。我正在努力解决的问题是,当数组内容从split函数返回时捕获数组内容 请参阅说明问题的模拟代码: #include <stdio.h> #include <string.h> #include <stdlib.h> char **split(const char *string, const char *delimiter) { p
split
函数返回时捕获数组内容
请参阅说明问题的模拟代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char **split(const char *string, const char *delimiter)
{
printf("String length %zu\n", strlen(string));
char *params[strlen(string)];
char input[strlen(string)];
strcpy(input, string);
int i = 0;
params[i] = strtok(input, delimiter);
printf("Chunk %d = %s\n", i, params[i]);
while(params[i] != NULL) {
char *chunk = strtok(NULL, delimiter);
params[++i] = chunk;
printf("Chunk %d = %s\n", i, params[i]);
}
size_t size = sizeof(char **) * (i + 1);
printf("Size %zu\n", size);
char **destination = malloc(size);
memcpy(destination, params, size);
printf("First element %s\n", *destination);
return destination;
}
char **function()
{
return split("this is a test", " ");
}
void read(char **elements)
{
printf("First element %s\n", *elements);
char *b = *elements;
printf("First element %s\n", b);
}
int main(void)
{
char **elements = function();
printf("First element %s\n", *elements);
read(elements);
printf("First element %s\n", *elements);
return 0;
}
第一次出现第一个元素
后是这个
字符串,这与预期一致。虽然我不能正确地输出split
函数之外的第一个元素的内容
我做错了什么?如果您能给我一点建议,指出问题的根源,我将不胜感激。您调试过吗?@t0mm13b我已经尝试过在Linux上用DDD调试它。它一直在崩溃,所以我无法真正正确地调试程序。我将在X代码中再试一次。
char输入[strlen(string)];strcpy(输入,字符串)代码>越界写入。@EOF您认为这是根本原因吗?如果仔细观察,则在split
函数中正确打印出块。我的问题集中在main
、read
和function
函数中的变量输出上。我怀疑我以错误的方式使用了指针。@dummy:我没有在显示未定义行为的程序中搜索“根本原因”。它可以做任何它想做的事。
String length 14
Chunk 0 = this
Chunk 1 = is
Chunk 2 = a
Chunk 3 = test
Chunk 4 = (null)
Size 40
First element this
First element ��]�
First element �]�
First element �]�
First element ��]�