YouTip LogoYouTip

C Function Srand

## C Library Function - `srand()` The `srand()` function is a built-in function in the C standard library (``) used to initialize (seed) the pseudo-random number generator used by the `rand()` function. Without seeding, the `rand()` function will produce the exact same sequence of numbers every time the program is executed. Seeding the generator with a changing value, such as the current system time, ensures that the program generates a different sequence of pseudo-random numbers on each run. --- ## Syntax ```c void srand(unsigned int seed); ``` ### Parameters * **`seed`**: An unsigned integer value used as a seed by the pseudo-random number generator algorithm. ### Return Value This function does not return any value (`void`). --- ## How It Works The `rand()` function uses a mathematical formula (typically a Linear Congruential Generator) to generate a sequence of pseudo-random numbers. This sequence is entirely deterministic and depends on the starting value, known as the **seed**. * If you call `rand()` without calling `srand()` first, it behaves as if `srand(1)` was called automatically. * To achieve true pseudo-random behavior across different program executions, you should seed the generator with a value that changes with every run. The most common approach is to use the current system time via the `time()` function defined in ``. --- ## Code Example The following example demonstrates how to use `srand()` with the system time to generate five different random numbers between `0` and `49` on each execution. ```c #include #include #include int main() { int i, n; time_t t; n = 5; /* Initialize the pseudo-random number generator with the current time */ srand((unsigned) time(&t)); /* Output 5 random numbers between 0 and 49 */ for(i = 0; i < n; i++) { printf("%d\n", rand() % 50); } return 0; } ``` ### Example Output Running the compiled program will yield a different set of numbers each time: ```text 38 45 29 29 47 ``` --- ## Important Considerations ### 1. Seed Only Once You should call `srand()` **only once** at the beginning of your program (usually in the `main` function). Calling `srand()` repeatedly before every call to `rand()` will reset the generator sequence. If called within a fast loop, it may cause `rand()` to return the exact same value repeatedly because the system time (in seconds) has not changed. ### 2. Reproducibility for Debugging If you need to debug a program that relies on random behavior, you can pass a fixed constant value to `srand()` (e.g., `srand(42)`). This ensures that the program generates the exact same sequence of "random" numbers every time you run it, making bugs reproducible. ### 3. Security Limitations The combination of `srand()` and `rand()` is **not cryptographically secure**. The underlying algorithm is predictable if an attacker can guess or determine the seed value (such as the system time). For security-sensitive applications (like generating cryptographic keys or passwords), use platform-specific secure random APIs (such as `getrandom()` on Linux or `BCryptGenRandom` on Windows).
← C Function WcstombsC Function Rand β†’