Le 29/09/13 14:06, Simon Zehnder a écrit :
Dear Rcpp::Users and Rcpp::Devels,

I would like to understand a certain behaviour of my code I encountered lately.

I am working with CharacterVector and the following behaviour occurred:

void test1 (Rcpp::CharacterVector &charv)
{
        Rprintf("test1: %s\n", (char*) charv(0));
}

void test2 (const Rcpp::CharacterVector &str)
{
        Rprintf("test2: %s\n", (char*) charv(0));
}

Try actually using the variable you pass in, as in:

void test2 (const Rcpp::CharacterVector &str)
{
        Rprintf("test2: %s\n", (char*) str(0));
}

Although it still exposes the bug.

You can use something like this in the meantime:

void test2 (const Rcpp::CharacterVector& charv)
{
    String x = charv[0] ;
    Rprintf("test2: %s\n", x.get_cstring());
}

It looks like the bug is about converting the result of charv(0) to a char*. Probably worth looking at the string_proxy class.

Romain

Using a string like "2013-05-04 20:23:21" for the Rcpp::CharacterVector gives 
the following outputs:

test1: 2013-05-04 20:23:21

test2:  `

This does also not change if I use a cast to const char* in test2. I tried 
something similar with strings and printing the c_str() of them, there the 
'const' keyword does not make a difference - it always prints the correct 
string.

Is this something specific to the Rcpp::CharacterVector, that uses a 
string_proxy for its elements returned by the operator ()? Is there a way to 
use const Rcpp::CharacterVector and get the behaviour of test1?


Best

Simon

--
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30

_______________________________________________
Rcpp-devel mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

Reply via email to