我想比较模式。所以我有将模式保存为字符串的结构,但是我希望能够构建一个字符串并将该字符串的VALUE存储在结构中。目前,我只是复制我的字符串的地址。
typedef struct
{
int emp;
char *context;
int numOnes;
int numZeros;
}Pattern;
char *patt, str[t+1];
patt = str;
while(count<t){
//printf("Stream: %d\n", stream[end]);
if(stream[end] == 1){
patt[count]= '1';
//writeBit(1);
}
else{
patt[count]='0';
//writeBit(0);
}
end--;
count++;
}
patt[count]=0;//building string
if(found == 0){//if pattern doesnt exist, add it in
patterns[patternsIndex].context = patt; //NEED HELP HERE. This copies the address not the actual value, which is what i need
patterns[patternsIndex].emp = 1;
prediction = 0;
checkPredict(prediction,stream[end],patternsIndex);
patternsIndex++;
found =1;
}
答案 0 :(得分:1)
如果您的意思是要取字符串“14”并使其成为值为14的数字,那么请查看atoi
标准函数。
答案 1 :(得分:1)
为避免使Pattern.context
成为固定大小的数组,并确保有足够的空间可以复制到其中,您需要为Pattern.context
动态分配内存以存储patt
的副本。之一:
使用malloc()
(记住为空终结符分配strlen(patt) + 1
)和strcpy()
:
patterns[patternsIndex].context = malloc(strlen(patt) + 1);
if (patterns[patternsIndex].context)
{
strcpy(patterns[patternsIndex].context, patt);
}
使用strdup()
:
patterns[patternsIndex].context = strdup(patt);
在任何一种情况下,请记住free()
不再需要时的字符串副本:
free(patterns[patternsIndex].context);