嘿,我的代码出现问题,我创建了令牌并添加它,将令牌添加到2D阵列但是无法正常工作。不知道为什么。
/* strtok example */
#include <stdio.h>
#include <string.h>
int main ()
{
char str[] ="This a sample string";
char * st[4][0];
char * pch;
int i;
printf ("Splitting string \"%s\" into tokens:\n",str);
pch = strtok (str," ");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, " ");
for(i=0;i<4;i++)
{
st[i][0]=pch;
}
}
print(st, i);
return 0;
}
void print(char st[4][0], int i)
{
for(i=0;i<4;i++)
{
printf("%d - %s",i ,st[i][0]);
}
}
答案 0 :(得分:4)
char * st[4][0];
您正在分配一个零长度的数组。稍后您尝试访问第一个不存在的元素,因此您会得到未定义的行为。
我无法理解为什么这个数组有两个维度。您只能访问第二个维度的第一个元素,为什么不:
char * st[4];
...
更准确地说,我根本不了解这个变量的用法。为什么要在所有四个元素中写入相同的值?
答案 1 :(得分:1)
存在许多问题:与此代码比较:
/* strtok example */
#include <stdio.h>
#include <string.h>
void print(char *st[4]) // Fixed parameter type
{
int i; // i is a local counter
for(i=0;i<4;i++)
{
printf("%d - %s\n",i ,st[i]);
}
}
int main ()
{
char str[] ="This a sample string";
char * st[4]; // Corrected array definition
char * pch;
int i=0; // Initialise counter i to 0
printf ("Splitting string \"%s\" into tokens:\n",str);
pch = strtok (str," ");
while (pch != NULL)
{
st[i]=pch; // Store string before overwriting pch, and only store in a single location
printf ("%s\n",pch);
pch = strtok (NULL, " ");
i++; // increment i inside loop
}
print(st);
return 0;
}