I want to generate a random string text of length 100 with the code below, then to verify that I print the length of the variable text but sometimes that is less than 100. How can I fix that?
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
int main() {
int i, LEN = 100;
srandom(time(NULL));
unsigned char text[LEN];
memset(text, 1, LEN);
for (i = 0; i < LEN; i++) {
text[i] = (unsigned char) rand() & 0xfff;
}
printf("plain-text:");
printf("strlen(text)=%zd\n", strlen(text));
}
Perhaps a random character 0
was added to the string, and then it is considered as the end of string by strlen
.
You can generate random characters as (rand() % 255) + 1
to avoid zeros.
And at the end you have to zero-terminate the string.
LEN = 101; // 100 + 1
....
for (i = 0; i < LEN - 1; i++) {
text[i] = (unsigned char) (rand() % 255 + 1);
}
text[LEN-1] = 0;
I want to generate a random string text of length 100 with the code below, then to verify that I print the length of the variable text but sometimes that is less than 100. How can I fix that?
First of all, if you want to generate a string of length 100, you'll need to declare an array of size 101.
int i, LEN = 101;
srandom(time(NULL));
unsigned char text[LEN];
When you are assigning the characters from the call to rand
, make sure that it is not 0
, which is usually the null terminator for strings.
for (i = 0; i < LEN - 1; /* Don't increment i here */) {
c = (unsigned char) rand() & 0xfff;
if ( c != '\0' )
{
text[i] = c;
// Increment i only for this case.
++i
}
}
and don't forget to null terminate the string.
text[LEN-1] = '\0';
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With