如何从char *获取字符串的值而不是地址

时间:2014-04-25 15:26:15

标签: c string pointers char

我想比较模式。所以我有将模式保存为字符串的结构,但是我希望能够构建一个字符串并将该字符串的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;
} 

2 个答案:

答案 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);