我试图将字符串从指针保存到数组。但是我的代码输出了分段错误。这是我的代码:
char timelog[maxline];
matchescount = 0;
while ((read = getline(&line, &len, fp)) != -1) {
struct matches matched = check_match(line,lgd,grd);
if (matched.status==1)
{
strcpy(timelog[matchescount],matched.timelog);
matchescount++;
}
}
这里:matched.timelog="10:24:12"
喜欢字符串。我想将它保存到timelog [matchescount]。所以我想从timelog数组中得到这个:
timelog[0]="10:24:12"
timelog[1]="10:24:13"
更新 我可以存储2d字符串数组吗?
char timelog [maxline] [255]
创建
[0][0]="1" [0][1]="0" [0][2]=":" [0][3]="2" [0][4]="4" [0][5]=":" [0][6]="1" [0][7]="2"
[1][0]="1" .......
对吧?
我可以这样存储吗?
[0] [0] =" 10:24:12" [0] [1] =" 10:24:13"
[1] [0] =" 10:24:14" [1] [1] =" 10:24:15"
答案 0 :(得分:2)
假设您的时间日志字符串总是看起来像“hh:mm:ss”,您可以
#define MAXTIMELOG 9
#define MAXENTRIES 1000
char timelog[MAXENTRIES][MAXTIMELOG];
matchescount = 0;
while ((read = getline(&line, &len, fp)) != -1) {
struct matches matched = check_match(line, lgd, grd);
if (matched.status==1)
{
strncpy(timelog[matchescount], matched.timelog, MAXTIMELOG);
timelog[matchescount][MAXTIMELOG-1] = 0;
if (++matchescount == MAXENTRIES) {
... deal with full array ...
}
}
}
答案 1 :(得分:2)
只需制作2D数组。错误是因为你的数组是1D所以你只能在该数组中存储一个字符串。要存储多个进行以下更改。
char timelog[maxline][10];
matchescount = 0;
while ((read = getline(&line, &len, fp)) != -1) {
struct matches matched = check_match(line,lgd,grd);
if (matched.status==1)
{
strcpy(timelog[matchescount],matched.timelog);
matchescount++;
}
}
<强> 更新: 强>
char timelog[maxline][255]
创建一个char的二维数组.As是一个字符数组,你只能在char的二维数组中存储字符串的si1D数组
timelog[0][0]='a';
timelog[0][1]='b';
timelog[0][2]='c';
timelog[0][3]='d';
timelog[0][4]='e';
这表示你在timelog [0]上有一个字符串“abcde”;
存储2d字符串数组,需要3D字符数组
timelog[maxline][noOfStrings][maxLengthOfEachString];
现在您可以存储2D字符串数组。
strcpy(timelog[0][0],"abcd");
strcpy(timelog[0][1],"efgh");
strcpy(timelog[1][0],"ijkl");
strcpy(timelog[1][1],"xyz");
答案 2 :(得分:0)
实际上,您不应该将字符串复制到预分配的数组中。请改用动态数组:
size_t timelogSize = 8, matchescount = 0;
char** timelog = malloc(timelogSize*sizeof(*timelog));
while ((read = getline(&line, &len, fp)) != -1) {
struct matches matched = check_match(line,lgd,grd);
if (matched.status==1) {
if(matchescount == timelogSize) {
timelogSize *= 2;
timelog = realloc(timelog, timelogSize*sizeof(*timelog));
}
timelog[matchescount++] = strdup(matched.timelog);
}
}
这有一个很大的优势,你可以处理任意大小和计数的输入字符串。通过在任何地方执行此操作,您需要一个数组,您可以避免许多等待发生的错误。