How to get survdiff returned p value

The p value is not stored in the survdiff class, so it must be calculated on the fly at the time of output. To reproduce the p value one could use the chisq distribution function: "pchisq"

diff = survdiff(Surv(Time, Censored) ~ Treatment+Gender, data = dat)
pchisq(diff$chisq, length(diff$n)-1, lower.tail = FALSE)

The code in the function print.survdiff that displays that values is:

cat("\n Chisq=", format(round(x$chisq, 1)), " on", df, 
            "degrees of freedom, p=", format(signif(1 - pchisq(x$chisq, 
                df), digits)), "\n")

The code leading up to it:

if (is.matrix(x$obs)) {
            otmp <- apply(x$obs, 1, sum)
            etmp <- apply(x$exp, 1, sum)
        }         else {
            otmp <- x$obs
            etmp <- x$exp
        }
        df <- (sum(1 * (etmp > 0))) - 1

And 'digits' is set to 3 in the argument list, so using the example on the surv.diff help page:

x <- survdiff(Surv(time, status) ~ pat.karno + strata(inst), data=lung) 
cat( "p=", format(signif(1 - pchisq(x$chisq, 
                 df), digits)) )
#p= 0.00326 

Addressing the comment: In the example the second code block reduces to:

 df <- with(x,    (sum(1 * (apply(x$exp, 1, sum) > 0))) - 1 )
> df
[1] 7